没有无参数构造函数C ++的类

时间:2012-12-27 05:40:04

标签: c++

我的程序中有一个类,它是一个文件解析器,为我提供输出。由于这是一个文件解析,因此必须传递文件名才能使用此类。

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()'|

如何在初始化期间为类保留强制参数?

4 个答案:

答案 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;