将流定义为私有 class 变量似乎在 Linux 下有效,但在 Windows Visual Studio 下无效

Defining a stream as private class variable seems working under Linux but not under Windows Visual Studio

我已经在这个论坛上找到了几个讨论不允许复制流对象的主题,但我不确定(至少我不这么认为)这是我的情况。

我想将流定义为给定 class 的私有变量。我过去已经为 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 上工作只是因为它似乎是迄今为止对我来说唯一的区别,但我也希望原因可能具有不同的性质。 提前致谢

正如@Cheersandhth.-Alf 和@PaulMcKenzie 指出的那样,错误的原因在于复制机制。 事实上,在我的 main.cpp 我写了

int main(){

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

}

其中整个classFTSensor的实例ftsboost::bind方法中是按值传递的,出现了上面的错误。更正

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

导致构建成功。 感谢您的快速支持。