c ++ "неопределенная ссылка на 'Foo :: Foo (std :: string)'"

c++ undefined-reference

8309 просмотра

2 ответа

763 Репутация автора

Я не слишком знаком с c ++ и с тем, как создаются экземпляры объектов, так что это, вероятно, очень простая вещь для решения. Когда я компилирую с g ++, я получаю ошибку "неопределенная ссылка на 'Foo :: Foo (std :: string)'". Я хочу создать экземпляр класса Foo, который имеет строковый параметр в своем конструкторе. Вот код:

foo.h

#include <string>
using namespace std;

class Foo
{
    public:
        Foo(string s);

    private:
        string id;
};

foo.cpp

#include <string>
#include "Foo.h"
using namespace std;

Foo::Foo(string s)
{
    id = s;
}

main.cpp

#include <string>
#include "Foo.h"
using namespace std;

int main()
{
    Foo foo("bar");

    return 0;
}
Автор: Aaron Источник Размещён: 07.09.2010 05:39

Ответы (2)


15 плюса

48785 Репутация автора

Решение

Возможно, вы не включили Foo.cpp в свою строку компиляции. Это должно выглядеть примерно так:

g++ main.cpp Foo.cpp -o testFoo
Автор: Fred Larson Размещён: 07.09.2010 05:42

2 плюса

1045 Репутация автора

Не связано с проблемой, с которой вы столкнулись, но подумайте о внесении нескольких незначительных изменений:

  1. Передайте аргумент в константной ссылке. const, потому что вы не планируете изменять значение аргумента и ссылки, чтобы не создавать никаких дополнительных временных объектов.

  2. C ++ имеет концепцию инициализатора, которая более эффективна, чем использование оператора присваивания для элемента 'id' в теле конструктора. Текущая версия конструктора вызовет конструктор по умолчанию для идентификатора члена, а затем его конструктор присваивания. Концепция инициализатора (то есть 'id (s)') просто вызовет один метод конструктора копирования.

    Foo :: Foo (const string & s): id (s)
    {
    }

Автор: skimobear Размещён: 07.09.2010 07:25
Вопросы из категории :
32x32