2017-02-02 2 views
0

このフォーラムではストリームオブジェクトのコピーが許可されていないことについて議論していますが、そうは思わない)これは私の場合です。ストリームをプライベートクラス変数として定義することはLinuxでは可能ですが、Windowsでは実行できないようですVisual Studio

ストリームを特定のクラスのプライベート変数として定義する必要があります。私はすでにUbuntuの下で書かれたアプリケーションのためにこれをやっています。

class of_driving{ 
public: 
    of_driving(); 
    ~of_driving(); 

    // ... Some public stuff ... 

private: 
    // ... Some private stuff ... 
    std::ofstream J_f; 
}; 

これは簡単に実行できました。 は今、私は基本的に別のアプリケーションのために同じことをやろうとしているが、私はWindowsでのVisual Studioに取り組んでいます:

class FTSensor{ 

public: 
    FTSensor(); 
    ~FTSensor(); 
private: 
    std::stringstream ftMeasurementSS; 
}; 

しかし、私は、次のエラーを得たソリューションを構築する場合:

Errore 2 error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>' D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sstream 724

誰でもこの現象を説明できますか?私は今までのところ唯一の違いだと思うので、別のOSで作業していたことを強調しましたが、その理由は異なる性質のものになるとも考えています。 ありがとうございます

+0

どのバージョンのMSVSを使用していますか? – NathanOliver

+0

OSの違いは無関係です。重要なことはコンパイラ、あなたの場合はWindows VC++、Ubuntu gccでは指定していないが、私は言うだろう。同じプラットフォームの下には常に複数のコンパイラがあるので、プラットフォームをリストすることはあまり役に立ちません。 – Rakete1111

+2

ストリームをコピーしようとしているようです。完全で再現性の高い**例**を提供してください。 –

答えて

0

@ Cheersandhth.-Alfと@PaulMcKenzieは、エラーの原因はコピーメカニズムにあると指摘しています。 は実際には、私のmain.cppに私はクラス全体FTSensorのインスタンスftsは、上記のエラーが発生する、boost::bind方法で値によって渡され

int main(){ 

FTSensor fts; 
tg.create_thread(boost::bind(&FTSensor::threadCallback,fts)); 
tg.join_all(); 

} 

を書きました。行を修正してください

tg.create_thread(boost::bind(&FTSensor::threadCallback,&fts)); 

結果は成功しました。 ご利用いただきありがとうございます。

関連する問題