0

ブースト ファイルシステムを使用する次のクラスがありますが、コンパイル時に問題が発生しました。

/// tfs.h file:

#include <boost/filesystem.hpp>
#include <iostream>
#include <string>

using namespace boost;
using namespace std;

class OSxFS
{
  public:
    OSxFS(string _folderPath)
    {
      mFolderPath(_folderPath);
    }

    string ShowStatus()
    {
      try
      {
        filesystem::file_status folderStatus = filesystem::status(mFolderPath);
        cout<<"Folder status: "<<filesystem::is_directory(folderStatus)<<endl;
      }
      catch(filesystem::filesystem_error &e)
      {
        cerr<<"Error! Message: "<<e.what()<<endl;
      }
    }

  private:
    filesystem::path mFolderPath;
}

m.cpp ファイルでは、次のコードを使用して OSxFS クラスを呼び出します。

///m.cpp file 

#include "tfs.h"
#include <iostream>
#include <string>

using namespace std;
using namespace boost;

int main()
{  
  string p = "~/Desktop/";
  OSxFS folderX(p);
  folderX.ShowStatus();
  cout<<"Thank you!"<<endl;
  return 0;
}

ただし、xCode で g++ でコンパイルすると、エラー メッセージが表示されます。

In file included from m.cpp:1:
tfs.h: In constructor ‘OSxFS::OSxFS(std::string)’:
tfs.h:13: error: no match for call to ‘(boost::filesystem::path) (std::string&)’
m.cpp: At global scope:
m.cpp:5: error: expected unqualified-id before ‘using’

OSxFS クラスの関数 ShowStatus() を単一の main.cpp に実装すると、機能します。それで、問題は文字列変数 _folderPath をクラスのコンストラクターに渡す方法についてだと思いますか?

4

1 に答える 1

4

の末尾にセミコロンがありませんclass OSxFS。また、のコンストラクターを呼び出すために誤った構文を使用していますpath。試す:

OSxFS(string _folderPath) :
    mFolderPath(_folderPath)
{ 
}

mFolderPath(_folderPath);コンストラクターの本体で、関数としてOSxFS呼び出そうとしmFolderPathています。

于 2012-08-20T03:16:24.910 に答える