将流定义为私有类变量似乎在Linux下有效,但在WindowsVisualStudio下无效

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

本文关键字:有效 Linux 但在 无效 WindowsVisualStudio 定义 类变量      更新时间:2023-10-16

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

我想将流定义为给定类的私有变量。我过去已经为一个在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;
};

然而,当我构建解决方案时,我得到了以下错误:

错误2错误C2248:"std::basic_ios&lt_Elem,_Traits>::basic_ios":无法访问类"std::basic_ios&lt_Elem,_Traits>'D:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\include\stream 724

有人能解释我的这种行为吗?我强调我使用不同的操作系统,只是因为这似乎是迄今为止我唯一的不同,但我也认为原因可能是不同的。提前感谢

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

int main(){
FTSensor fts;
tg.create_thread(boost::bind(&FTSensor::threadCallback,fts));
tg.join_all();
}

其中整个类FTSensor的实例fts通过boost::bind方法中的值传递,从而产生上述错误。纠正中的行

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

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