Я неправильно использую gcc? - PullRequest
3 голосов
/ 08 августа 2011

У меня не было никаких проблем, когда я только начинал с 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 ]

4 голосов
/ 08 августа 2011

Пример кода просто неверен.: -)

//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!

4 голосов
/ 08 августа 2011

Вы должны включить 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
0 голосов
/ 08 августа 2011

Действительно трудно определить, что происходит, не глядя на ваш код. Убедитесь, что вы включаете .o файла, в котором определен класс dog.

Также, если массив не был создан с новым [], не используйте delete [].

Наконец, я знаю, что вы конкретно не спрашиваете об этом, но, возможно, стоит найти лучший онлайн-ресурс для изучения C ++. По крайней мере, используйте тот, который не имеет смущающих ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...