2011-04-04 63 views
0

好的,如上所述,我有兩個未解決的外部錯誤。沒有intellisense錯誤,只有這兩個鏈接器錯誤。這是代碼。LNK 2019無法解析的外部問題

include "stdafx.h" 
include <iostream> 
using namespace std; 

class circle; //forward declaration 

class square 
{ 
public: 
    square create_square(circle user_circle); 
}; 

class circle 
{ 
public: 
    friend square square::create_square(circle user_circle) 
}; 

square square::create_square(circle user_circle) 
{  
    square user_square(user_circle.get_circumference()); 
    return user_square; 
} 

// function call 
user_square = user_square.create_square(user_circle); 

這是不是整個程序,但這個錯誤似乎指向這批代碼

錯誤1錯誤LNK2019:解析外部符號
「市民:__thiscall圈::〜圈(void)「(?? 1circle @@ QAE @ XZ)在功能
中引用」public:class square __thiscall square :: create_square(class circle)「
(?create_square @ square @@ QAE?AV1 @ Vcircle @@ @Z)
C:\ Users \ John \ documents \ visual studio 2010 \ Projects \ PROG5 \ PROG5 \ PROG5.obj

錯誤2錯誤LNK2019:解析外部符號
「公共:__thiscall平方::〜平方(無效)」(?? 1平方@@ @ QAE XZ)在功能
「公共引用:類方形__thiscall正方形: :create_square(class circle)「
(?create_square @ square @@ QAE?AV1 @ Vcircle @@@ Z)
C:\ Users \ John \ documents \ visual studio 2010 \ Projects \ PROG5 \ PROG5 \ PROG5.obj

我真的很難過,我不想隨機更改代碼,因爲我的邏輯應該是正確的。一個圓形對象被傳遞給create_square函數,該函數獲取圓的直徑並將其作爲該圓形的周長。至於毫無意義的練習,這是一堂課。希望有人能幫助,謝謝。

回答

0

您聲明瞭一個circle析構函數和一個square析構函數 - 但您沒有實現它們。

此外,你應該值更喜歡傳球常量引用:

square create_square(circle const & user_circle); 

你在這一點上得到的錯誤,因爲你是按值傳遞一個circle - 這意味着一個臨時將被創建和破壞 - 並且因爲您按值返回square,這意味着square將被構建和銷燬。

+0

這裏沒有析構函數或構造函數,我沒有包含整個程序。它們是在代碼中實現的,從錯誤的說法我不認爲構造函數或析構函數是問題 – John 2011-04-04 18:28:51

+0

@John:「public:__thiscall circle ::〜circle(void)」 - 這是circle的析構函數,它不是定義。 – Erik 2011-04-04 18:29:30

+0

啊我又看了一遍,我忽略了無參數析構函數上的{}(構造函數被重載)。哈哈,謝謝你的幫助。 – John 2011-04-04 18:35:17

0
square square::create_square(circle user_circle) 
{  
    square user_square(user_circle.get_circumference()); 
    return user_square; 
} // Destruction point of user_circle 

// function call 
user_square = user_square.create_square(user_circle); 

問題是user_circle通過值傳遞到square::create_square。所以,傳入的參數被複制到接收參數。在函數的返回上,對象需要被破壞,但是由於在類聲明中,你只提供了析構函數聲明,而不是鏈接器所抱怨的定義。

+0

是的,我忘了把{}放在我的析構函數上。謝謝。 – John 2011-04-04 18:36:36