开始使用C ++时,我一直没有遇到麻烦。似乎无论我做什么,我都有很多错误。我已经开始编译教程中的示例代码,但即使是示例代码也无法编译。例如,代码位于: http://www.cppgameprogramming.com/cgi/nav.cgi?page=arrayclasses
当我尝试时,给了我很多瑕疵:
$ g++ main.cpp -o dog
它说:
> main.cpp: In function 'int main()': main.cpp:18:15: warning: deleting
> array 'Dog myDogs [5]'
> C:\Users\bob-pc\Appdata\Local\Temp\ccTXXCOB.o:main.cpp:(.text+0x21):
> undefined rference to 'Dog::Dog()' C:\Users\bob-pc\Appdata\Local\Temp\ccTXXCOB.o:main.cpp:(.text+0x59):
> undefined rference to 'Dog::setAge(int)' C:\Users\bob-pc\Appdata\Local\Temp\ccTXXCOB.o:main.cpp:(.text+0x88):
> undefined rference to 'Dog::getAge()' collect2: Id returned 1 exit status
这不是我第一次尝试直接复制示例代码&编译它。即使在我修改语法之后,我也遇到了很多麻烦,但我似乎无法获得标题和放大器。图书馆工作正常。任何帮助非常感谢。
答案 0 :(得分:4)
您必须在编译中包含dog.cpp
:
g++ main.cpp dog.cpp -o dog
或者,您可以将dog.cpp
单独编译为目标文件,并将其包含在最终编译中:
g++ dog.cpp -c -o dog.o
g++ main.cpp dog.o -o dog
答案 1 :(得分:4)
示例代码完全错误。 : - )
//main.cpp
#include <iostream>
#include "Dog.h"
using namespace std;
int main()
{
Dog myDogs[5];
for (int i = 0; i <= 4; i++)
myDogs[i].setAge( i * 2);
for (int i = 0; i <= 4; i++)
cout << "Dog number " << i << " is " << myDogs[i].getAge() << " years old!\n";
delete [] myDogs; <--- Don't do this!
return 0;
}
如果您尚未使用delete
分配对象,则不应使用new
。在这种情况下,狗会照顾自己。只需删除delete
!
答案 2 :(得分:0)
如果不查看代码,很难确定发生了什么。确保包含定义类狗的文件的.o。
如果数组不是用new []创建的,请不要使用delete []。
最后,我知道你并没有特别询问这个问题,但在线学习C ++可能是值得的。至少使用一个没有令人尴尬的错误。