我正在研究 Ellis Horowitz 编写的 C ++数据结构基础,尝试在第77页上实现该示例。但是,在我构建项目之后,Eclipse Console出现了一些警告。
这是我的头文件:
#ifndef RECTANGLE_H_
#define RECTANGLE_H_
class Rectangle{
public:
Rectangle();
~Rectangle();
int GetHeight();
int GetWidth();
private:
int xLow, yLow, height, width;
} ;
#endif
这是我的源文件:
#include <iostream>
#include "Rectangle.h"
using namespace std;
int main(){
Rectangle r, s;
Rectangle *t = &s;
if(r.GetHeight()*r.GetWidth() > t->GetHeight()*t->GetWidth())
cout << "r";
else
cout << "s";
cout << "has the greater area" << endl;
return 0;
}
CDT Build Console显示:
Building target: rectangle
Invoking: MacOS X C++ Linker
g++ -o "rectangle" ./main.o
Undefined symbols:
"Rectangle::Rectangle()", referenced from:
_main in main.o
_main in main.o
"Rectangle::GetWidth()", referenced from:
_main in main.o
_main in main.o
"Rectangle::GetHeight()", referenced from:
_main in main.o
_main in main.o
"Rectangle::~Rectangle()", referenced from:
_main in main.o
_main in main.o
_main in main.o
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [rectangle] Error 1
**** Build Finished ****
此外,在构建项目后会自动创建二进制文件吗?
答案 0 :(得分:1)
您的Rectangle方法的实现确实缺失。
这是方法,您可以在链接器错误消息中看到:
Rectangle::Rectangle()
Rectangle::GetHeight()
Rectangle::GetWidth()
如果您有一个 Rectangle.cpp (或.cc,.cxx)文件,那么您还需要编译它并链接Rectangle.o文件。
因为你在这里简单地概述了不同的文件名结尾:
答案 1 :(得分:0)
您还没有在任何地方定义Rectangle类函数。 Rectangle.c在哪里?
头文件只是声明该类存在,但您没有为该类提供任何定义。你需要一个Rectangle.c来做到这一点。您还必须链接Rectangle.o。