将流定义为私有 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
的实例fts
在boost::bind
方法中是按值传递的,出现了上面的错误。更正
中的行
tg.create_thread(boost::bind(&FTSensor::threadCallback,&fts));
导致构建成功。
感谢您的快速支持。
我已经在这个论坛上找到了几个讨论不允许复制流对象的主题,但我不确定(至少我不这么认为)这是我的情况。
我想将流定义为给定 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
的实例fts
在boost::bind
方法中是按值传递的,出现了上面的错误。更正
tg.create_thread(boost::bind(&FTSensor::threadCallback,&fts));
导致构建成功。 感谢您的快速支持。