1

プログラムに、出力を提供するファイルパーサーであるクラスがあります。これはファイル解析であるため、このクラスを使用するにはファイル名を渡す必要があります。

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

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は、リーダーはポインター型である必要があります。

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 に答える