1

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

文件阅读器.h

class FileReader{
public:
FileReader(std::string filePath);
//other member functions
private:
//private variables
};

主程序.h

class MainProgram{
public:
FileReader reader; //this gives error
private:
};

主程序.cpp

MainProgram::setup()
{
public:
    reader = new FileReader("files/something.xml") //intended to use like this
}

错误: src/MainProgram.h|57|错误:没有用于调用“FileReader::FileReader()”的匹配函数|

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

4

4 回答 4

4

代替:

FileReader(std::string filePath)();  // not valid way of providing function definition

和:

FileReader(std::string filePath){}

您还需要在 MainProgram 构造函数中初始化 FileReader member initialzer list

如果要new FileReader在 setup 函数中使用,那么 reader 需要是指针类型。

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;
}
于 2012-12-27T05:42:02.420 回答
2

如果这是您的全部setup功能,请取消它并改用构造函数 - 这就是它们的用途!

MainProgram::MainProgram() : reader("files/something.xml"){}

使用提供的字符串进行初始化(如调用其构造函数)。reader

于 2012-12-27T05:47:34.517 回答
0
FileReader * reader; // This line should not create a FileReader object on stack, a pointer is enough

这里的 C++ 语法与 Java/C# 不同。您需要在语句中声明显式指针类型。

于 2012-12-27T05:44:38.467 回答
0

试试FileReader *reader;

于 2012-12-27T05:47:23.800 回答