0

所以我正在编写这个客户端/服务器程序。此代码来自客户端。客户端有一个对象的实例

mpqs_sieve *instance_;

我将它作为指针的原因是,mpqs_sieve 只有一个带有 3 个参数的构造函数,我想在稍后的时间点实例化它。

客户端首先从服务器获取一些数据,并使用它来实例化 instance_。在此之后,它将请求更多数据,并且在接收到这些数据后(这是二次多项式的三个系数),它应该在 instance_ 对象中设置这些数据。但是,在调用 instance_ 的成员函数时,我在该函数调用中遇到了 instance_ 成员之一的访问冲突。

我在这里发布了我的代码:在 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);
        // ...
    }
};

有什么想法可以解决这个问题吗?

4

2 回答 2

3

您将指针的副本传递instance_给函数,而不是对变量的引用。当您分配给 时instance_,您正在修改一个局部变量,而不是同名的成员变量。

将函数参数更改为mpqs_sieve *&instance_

于 2010-04-26T11:37:04.927 回答
0

关于现有答案中变量引用的注释是一个很好的观点,我看到了另一个潜在的问题:

如果我正确理解您的代码,则该对象是在第 48 行的 set_mpqs_data() 函数中创建的。您确定在此之前调用了 set_mpqs_data() 函数(正在处理 MPQS_DATA 消息)吗?否则,当您调用 set_polynomial_data() 时,instance_ 可能不会指向真实对象。

于 2010-04-26T11:45:41.307 回答