2

クラスを作成しました:

    Data::Data(char szFileName[MAX_PATH]) {

    string sIn;
    int i = 1;

    ifstream infile;
    infile.open(szFileName);
    infile.seekg(0,ios::beg);

    std::vector<std::string> fileRows;
    while ( getline(infile,sIn ) )
    {
      fileRows.push_back(sIn);
    }
}

その後、私はこれを作成しました:

std::vector<std::string> Data::fileContent(){
        return fileRows;
}

その後、これを次のようにfileContent()どこかで呼び出したいと思います。

Data name(szFileName);
MessageBox(hwnd, name.fileContent().at(0).c_str() , "About", MB_OK);

しかし、これは機能しません...これを呼び出す方法は?

4

2 に答える 2

2
std::vector<std::string> fileRows;
while ( getline(infile,sIn ) )
{
   fileRows.push_back(sIn);
}

コンストラクターで fileRows を宣言すると、コンストラクターが終了すると機能しませんfileRows

あなたがする必要があるのは、fileRows 宣言をコンストラクターの外に移動し、それをクラス メンバーにすることです。

class Data
{
...

   std::vector<std::string> fileRows;
};

その後、クラス内のすべての関数で共有されます。

于 2013-03-18T11:55:01.423 に答える
1

あなたはこのようにすることができます:

#include <string>
#include <vector>

class Data
{
public:
  Data(const std::string& FileName)  // use std::string instead of char array
  {
     // load data to fileRows
  }

  std::string fileContent(int index) const  // and you may don't want to return a copy of fiileRows
  {
      return fileRows.at(index);
  }

private:
    std::vector<std::string> fileRows;
};
于 2013-03-18T11:56:12.140 に答える