具有字符串流的类尝试按值传递
Class with stringstream trying to pass by value?
我有一个带有字符串流的类:
class NetMessageEncoder
{
std::stringstream m_ss;
std::stringstream m_numSS;
public:
NetMessageEncoder();
void beginMessage();
。
然后我有另一个类,其中包含该类的实例,我正在尝试制作一个向量:
m_games.resize(100);
该行产生:
Error 1 error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>' c:Program FilesMicrosoft Visual Studio 9.0VCincludesstream 516
我收集到这可能是因为向量需要复制类,我想会导致字符串流按值或其他东西复制?
字符串流确实是原因,如果删除,可以很好地编译。
有没有办法解决这个问题?
谢谢
struct TableS
{
ServerPlayer* m_players[4];
SpadesGameInfo m_info;
NetSpadesGame m_game;
bool readyToPlay() const
{
int count = 0;
for(int i = 0; i < 4; ++i)
{
if(m_players[i])
{
count++;
}
}
return count >= m_info.getNumPlayers();
}
TableS()
{
for(int i = 0; i < 4; ++i)
{
m_players[i] = NULL;
}
}
};
class ServerCore : public ServerHost, public NetEventListener
{
NetEventDecoder m_dec;
NetEventEncoder m_enc;
std::vector<ServerPlayer*> m_players;
int m_totalPlayers;
std::vector<TableS> m_games;
public:
...
流是不可复制的,因此它是您的NetMessageEncoder
,因为它包含流作为成员。如果您使用的是 C++11,则可以通过使类型可移动来克服此限制。
您可以执行以下操作之一:
1)覆盖NetMessageEncoder
的复制构造函数和赋值运算符并自己处理流复制(我想在您的情况下,使用新的流进行复制就足够了)
2) 避免使用 std::vector<TableS*> m_games;
而不是 std::vector<TableS> m_games;
复制流
相关文章:
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- C++类 - 初始化列表 - 递归 - 按值传递
- 将函数参数完美转发到函数指针:按值传递呢?
- 棘手的按值传递和按引用递归问题传递
- 不同于按值传递和常量引用传递的程序集
- 按值传递变量与按引用传递变量具有相同的结果
- 为什么按值传递QStringView比引用常量更快?
- 获取 std::函数以推断按引用传递/按值传递
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 使用 enable_if 在按值传递与按引用传递之间更改函数声明
- 防止在按值传递对象(继承)时进行切片
- 为什么C++编译器不在按值传递方案中优化更多的字符串构造?
- 字符串 按值传递
- 按引用和值传递字符串C++
- 具有字符串流的类尝试按值传递
- 我应该按值传递字符串还是将指针传递给它
- 按值传递字符串vs按值传递每个字符
- std::字符串可以跨DLL边界按值传递吗?
- 在c++中按值传递字符串和向量