c ++ "неопределенная ссылка на 'Foo :: Foo (std :: string)'"
8309 просмотра
2 ответа
Я не слишком знаком с 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
Источник
Размещён: 12.11.2019 09:53
Ответы (2)
15 плюса
Возможно, вы не включили Foo.cpp в свою строку компиляции. Это должно выглядеть примерно так:
g++ main.cpp Foo.cpp -o testFoo
Автор: Fred Larson
Размещён: 07.09.2010 05:42
2 плюса
Не связано с проблемой, с которой вы столкнулись, но подумайте о внесении нескольких незначительных изменений:
Передайте аргумент в константной ссылке. const, потому что вы не планируете изменять значение аргумента и ссылки, чтобы не создавать никаких дополнительных временных объектов.
C ++ имеет концепцию инициализатора, которая более эффективна, чем использование оператора присваивания для элемента 'id' в теле конструктора. Текущая версия конструктора вызовет конструктор по умолчанию для идентификатора члена, а затем его конструктор присваивания. Концепция инициализатора (то есть 'id (s)') просто вызовет один метод конструктора копирования.
Foo :: Foo (const string & s): id (s)
{
}
Вопросы из категории :
- c++ What are the barriers to understanding pointers and what can be done to overcome them?
- c++ Какой самый простой способ для анализа файла INI в C ++?
- c++ Когда вы должны использовать «друг» в C ++?
- c++ Как вы очищаете переменную stringstream?
- c++ В C ++ конструктор и деструктор могут быть встроенными функциями?
- c++ Что такое виртуальный базовый класс в C ++?
- c++ В чем разница между #include <filename> и #include "filename"?
- c++ Какой самый лучший бесплатный детектор утечки памяти для программы на C / C ++ и ее подключаемых библиотек DLL?
- c++ Как преобразовать std :: string в LPCWSTR в C ++ (Unicode)
- c++ Regular cast vs. static_cast vs. dynamic_cast
- undefined-reference Неопределенная ссылка на 'yylex ()'
- undefined-reference Undefined symbols error when using a header file
- undefined-reference c ++ "неопределенная ссылка на 'Foo :: Foo (std :: string)'"
- undefined-reference «Неопределенная ссылка» при связывании кода C в Linux
- undefined-reference неопределенная ссылка на sqrt (или другие математические функции)
- undefined-reference C ++: неопределенная ссылка на FMOD :: X
- undefined-reference Ошибка C: неопределенная ссылка на функцию, но она определена
- undefined-reference "неопределенная ссылка на" в G ++ Cpp
- undefined-reference Должна ли виртуальная функция иметь определение?
- undefined-reference Неопределенная ссылка на `pow 'и` floor'