好的,如上所述,我有两个未解决的外部错误。没有智能感知错误,只有这两个链接器错误。这是代码。
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函数,该函数获取圆的直径并使其成为正方形的周长。至于毫无意义的练习,这是一堂课。希望有人可以提供帮助,谢谢。
答案 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
。因此,传递的参数被复制到接收参数。在返回函数时,需要对象进行破坏,但由于在类声明中,您只提供了析构函数声明,但没有提供链接器抱怨的定义。