我的程序中有一个类,它是一个文件解析器,为我提供输出。由于这是一个文件解析,因此必须传递文件名才能使用此类。
FileReader.h
class FileReader{
public:
FileReader(std::string filePath);
//other member functions
private:
//private variables
};
MainProgram.h
class MainProgram{
public:
FileReader reader; //this gives error
private:
};
MainProgram.cpp
MainProgram::setup()
{
public:
reader = new FileReader("files/something.xml") //intended to use like this
}
错误: src / MainProgram.h | 57 |错误:没有匹配函数来调用'FileReader :: FileReader()'|
如何在初始化期间为类保留强制参数?
答案 0 :(得分:4)
取代:
FileReader(std::string filePath)(); // not valid way of providing function definition
使用:
FileReader(std::string filePath){}
您还需要在MainProgram构造函数member initialzer list
中初始化FileReader。
如果你想在设置功能中使用new FileReader
,那么读者需要是指针类型。
class MainProgram{
public:
MainProgram(const std::string& file):reader(file){} // init reader in member initializer
private:
FileReader reader;
};
int main(int argc, char* argv[])
{
MainProgram test("files/something.xml");
return 0;
}
答案 1 :(得分:2)
如果这是您的整个setup
函数,请取消它并使用构造函数 - 这就是它们的用途!
MainProgram::MainProgram() : reader("files/something.xml"){}
使用提供的字符串初始化(如调用其构造函数)reader
。
答案 2 :(得分:0)
FileReader * reader; // This line should not create a FileReader object on stack, a pointer is enough
C ++的语法与Java / C#不同。您需要在语句中声明一个显式指针类型。
答案 3 :(得分:0)
请尝试FileReader *reader;
?