LNK 2019未解决的外部问题

Trouble with LNK 2019 unresolved externals

本文关键字:外部 问题 未解决 2019 LNK      更新时间:2023-10-16

好的,如前所述,我有两个未解决的外部错误。没有智能感知错误之类的,只有这两个链接错误。代码如下:

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@square@@QAE ? AV1@Vcircle@@@Z)
C:UsersJohndocumentsvisual studio 2010ProjectsPROG5PROG5PROG5.obj

错误2错误LNK2019:未解析的外部符号
"public: __thiscall square::~square(void)"(??1square@@QAE@XZ)在函数
中引用"public: class square __thiscall square::create_square(class circle)"
(? create_square@square@@QAE ? AV1@Vcircle@@@Z)
C:UsersJohndocumentsvisual studio 2010ProjectsPROG5PROG5PROG5.obj

我真的被难住了,我不想随便改变代码,因为我的逻辑应该是正确的。一个圆对象被传递给create_square函数,该函数获得圆的直径,并将其作为正方形的周长。至于毫无意义的练习,这是为了一堂课。希望有人能帮忙,谢谢。

你声明了一个circle析构函数和一个square析构函数——但是你没有实现它们。

另外,您应该选择const引用而不是按值传递:

square create_square(circle const & user_circle);

此时出现错误是因为您按值传递了一个circle——这意味着将创建并销毁一个临时对象——并且因为您按值返回了一个square,这意味着将构造并销毁一个square

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。因此,传递的参数被复制到接收参数。在函数返回时,对象需要被解构,但由于在类声明中,您只提供了析构函数声明,而不是链接器抱怨的定义。