我使用gcc错了吗?

时间:2011-08-08 03:35:10

标签: c++ gcc

开始使用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

这不是我第一次尝试直接复制示例代码&编译它。即使在我修改语法之后,我也遇到了很多麻烦,但我似乎无法获得标题和放大器。图书馆工作正常。任何帮助非常感谢。

3 个答案:

答案 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 ++可能是值得的。至少使用一个没有令人尴尬的错误。