将流定义为私有类变量似乎在Linux下工作但不在Windows Visual Studio

时间:2017-02-02 17:16:15

标签: c++ visual-studio class stream private

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

我想将流定义为给定类的私有变量。我已经在过去为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错误C2248:' std :: basic_ios< _Elem,_Traits> :: basic_ios' :无法访问类中声明的私有成员' std :: basic_ios< _Elem,_Traits>' D:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ sstream 724

任何人都能解释一下这种行为吗?我强调我在不同的操作系统上工作只是因为它似乎是迄今为止我唯一的区别,但我也希望原因可能是不同的。 提前致谢

1 个答案:

答案 0 :(得分:0)

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

int main(){

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

}

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

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

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