2010-04-26 118 views
0

所以我编写这个客户端/服务器程序。这段代码来自客户端。客户端有一个对象指针对象的成员访问冲突

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); 
     // ... 
    } 
}; 

任何想法来解决这个?

+2

你应该在这里发布相关的代码。 – 2010-04-26 11:37:31

回答

3

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

将功能参数更改为mpqs_sieve *&instance_

+0

谢谢,这很有用。 – 2010-04-26 12:19:02

0

关于在现有的答案变量的引用的说明是一个很好的点,我看到另外一个潜在的问题:

如果我正确地理解你的代码,对象获取上线set_mpqs_data()函数创建48.你确定set_mpqs_data()函数在该时间之前被调用了吗(正在处理MPQS_DATA消息)?否则,当您调用set_polynomial_data()时,instance_可能不会指向真实的对象。

+0

嗨。是的,我考虑过这个=) – 2010-04-26 12:18:45