解决LNK 2019未解决的外部问题

时间:2011-04-04 18:24:02

标签: c++ visual-studio-2010

好的,如上所述,我有两个未解决的外部错误。没有智能感知错误,只有这两个链接器错误。这是代码。

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:未解析的外部符号
功能
中引用的“public:__thiscall circle ::〜circle(void)”(?? 1circle @@ QAE @ XZ) “public:class square __thiscall square :: create_square(class circle)”
(?create_square @方@@ QAE?AV1 @ Vcircle @@@ Z)
C:\ Users \ John \ documents \ visual studio 2010 \ Projects \ PROG5 \ PROG5 \ PROG5.obj

错误2错误LNK2019:未解析的外部符号
功能
中引用的“public:__thiscall square ::〜square(void)”(?? 1square @@ QAE @ XZ) “public:class square __thiscall square :: create_square(class circle)”
(?create_square @方@@ QAE?AV1 @ Vcircle @@@ Z)
C:\ Users \ John \ documents \ visual studio 2010 \ Projects \ PROG5 \ PROG5 \ PROG5.obj

我真的很难过,我不想随意更改代码,因为我的逻辑应该是正确的。圆形对象被传递给create_square函数,该函数获取圆的直径并使其成为正方形的周长。至于毫无意义的练习,这是一堂课。希望有人可以提供帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

您声明了circle析构函数和square析构函数 - 但您没有实现它们。

此外,您应该更喜欢const引用而不是传递值:

square create_square(circle const & user_circle);

此时您收到错误,因为您按值传递circle - 这意味着将创建和销毁临时 - 并且因为您按值返回square,这意味着square将被构建和破坏。

答案 1 :(得分: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。因此,传递的参数被复制到接收参数。在返回函数时,需要对象进行破坏,但由于在类声明中,您只提供了析构函数声明,但没有提供链接器抱怨的定义。