2010-04-26 114 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