c++构造函数继承不能正常工作

C++ Constructor inheritance not working correctly

本文关键字:工作 常工作 构造函数 继承 不能 c++      更新时间:2023-10-16

这是依赖的类头

#ifndef TransHeader
#define TransHeader
#include <string>
#include "CipherHeader.h"
using namespace std;
class Trans : public Cipher {
    public:
    Trans(string filenameIn);
    const static int MAXSIZE = 10000;
    void createArray();
    void transEncrypt();
    void transDecrypt();

    private:
        //string Key;
        //string inputData;
        char dataArray[MAXSIZE][MAXSIZE];

};
#endif

这是继承的头文件

#ifndef CipherHeader
#define CipherHeader
#include <string>
using namespace std;
class Cipher {
    public:
        const static int MAXSIZE = 10000;
        Cipher(string filenameIn);
        void getKey();
        void flagHandle(string);
        string Key;
        string inputData;
        string filename;
        string flags;
        string readFile();
        void writeFile();
    private:


};
#endif

问题是在我调用基构造函数

之后
Trans::Trans(string filenameIn) : Cipher(filenameIn) {}
我不能像这样在普通文件中调用构造函数:
#include "Trans.cpp"
int main() {
string a  = "asdf";
Trans *c = new Trans(a);
}

这会导致以下错误:

g++ test.cpp -o test.out
/tmp/ccbuqMYr.o: In function `Trans::Trans(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
test.cpp:(.text+0x35): undefined reference to `Cipher::Cipher(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/tmp/ccbuqMYr.o: In function `Trans::Trans(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
test.cpp:(.text+0xa5): undefined reference to `Cipher::Cipher(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status

用Cipher代替Trans工作得很好并且运行。我已经尝试了我所知道的一切,在谷歌上搜索了很多次,但还是无法找出这个错误。其他设计问题等稍后再处理,这是我的主要问题。请帮助。

编辑::密码的定义

Cipher::Cipher(string filenameIn) {
filename = filenameIn;
readFile();
getKey();
}

规则1 -永远不要在头文件中使用'using'语句!: -)

你需要调用基类构造函数。

:

Trans::Trans(const std::string &f) // notice pass by reference
    :Cipher(f)
{
}

您需要构建中的所有源文件:

g++ test.cpp trans.cpp cipher.cpp -o test

这会给你一个新的错误,因为你从test.cpp中包含了trans.cpp源文件,而不是头文件-修复它,它应该没有进一步的问题。