所以我正在编写这个客户端/服务器程序。此代码来自客户端。客户端有一个对象的实例
mpqs_sieve *instance_;
我将它作为指针的原因是,mpqs_sieve只有一个带有3个参数的构造函数,我想在以后的某个时间实例化它。
客户端首先从服务器获取一些数据,并使用它来实例化instance_。在此之后,它将请求更多数据,并且在接收到这些(这是二次多项式的三个系数)时,它应该在instance_对象中设置它们。但是,在调用instance_的成员函数时,我在该函数调用中的instance_成员之一上获得访问冲突。
我在这里发布了我的代码:on pastebin,我在第100行收到错误。调用来自第71行,在第21行之前。这是一段摘录:
class client_protocol {
public:
static std::string parse_message(
network_message& msg, mpqs_sieve *instance_)
{
// ...
return set_mpqs_data(m.substr(i+1), instance_);
}
private:
static std::string set_mpqs_data(
std::string data, mpqs_sieve *instance_)
{
instance_ = new mpqs_sieve(n, M, FB_count);
// ...
}
};
有什么想法可以解决这个问题吗?
答案 0 :(得分:3)
您正在将instance_
指针的副本传递给函数,而不是对变量的引用。当您分配给instance_
时,您正在修改局部变量,而不是具有相同名称的成员变量。
将函数参数更改为mpqs_sieve *&instance_
。
答案 1 :(得分:0)
关于现有答案中对变量的引用的说明是一个很好的观点,我看到另一个潜在的问题:
如果我正确理解你的代码,那么该对象将在第48行的set_mpqs_data()函数中创建。你确定在此之前调用了set_mpqs_data()函数(正在处理MPQS_DATA消息)吗?否则,当您调用set_polynomial_data()时,instance_可能不会指向真实对象。