неопределенная ссылка на блоки функционального кода

main.cpp

#include <iostream>
#include <string>
using namespace std;

void echo(string);

int main()
{
echo("hello");
cout << "Hello world!" << endl;
return 0;
}

print.cpp

#include <iostream>
#include <string>
void echo(string code){
cout << code;
}

После компиляции кода в кодовых блоках 12.11, это дает мне эту ошибку:

undefined reference to `echo(std::string)

Я использую Windows 7 x64.
Я добавил каталог; Проект> Параметры сборки> Поиск по каталогам и добавление текущего рабочего каталога.
Все файлы находятся в одном консольном проекте в блоках кода

0

Решение

Я считаю, что вы должны прочитать немного больше об использовании пространств имен. Вам не хватает std в print.cpp.

Как правило, когда вы начинаете изучать cpp или овладеваете языком, вы всегда должны пытаться написать полные имена классов вместе с пространствами имен. В конце концов с практикой и некоторыми упущениями (как сейчас) вы узнаете, почему они вам действительно нужны. В двух словах пространства имен велики:

  • Когда вы пишете код для нескольких файлов
  • Разделите ваш код на отдельные блоки.

Также, using namespace std; в основном следует использовать в файлах cpp (в противном случае заголовки искажаются.

В любом случае, попробуйте изменить свой код на это:

#include <iostream>
#include <string>
void echo(std::string code){
std::cout << code;
}

Тогда ваши результаты будут выглядеть так:

 > g++ main.cpp print.cpp -o a.out

> ./a.out
helloHello world!
2

Другие решения

Вы должны получить больше, чем эта ошибка компоновщика, так как вы используете string без какого-либо пространства имен в вашем print.cpp файл. И если этот исходный файл не компилируется, он не может быть связан с ним, и вы получите ошибку компоновщика, которая у вас есть.

Изменить, например, на

void echo(std::string code) { ... }

а вы делать попробуйте связать с объектным файлом, созданным из print.cpp ?

0

Я знаю, что это старая версия, но для тех, кто хочет решить эту проблему, решение может быть следующим. Если у вас есть g ++, следуйте c ++ 11 под опциями project-> build (все равно проверьте ваши настройки), тогда вы должен установите этот флажок для все файлы, которые вы делаете в проекте для устранения ошибки. У меня тоже была эта раздражающая неопределенная ссылка, но теперь она исчезла!

0

Попробуйте «Project / Properties / Build Targets tab». Там вы должны найти поле «Build target files». В этом поле найдите «print.cpp» и установите флажок (теперь компилятор создаст print.cpp).

Некоторая полезная информация по управлению проектами в ЦБ
http://www.codeblocks.org/docs/main_codeblocks_en.html

0

При работе со строками в C ++ лучше всего подавать в суд на std :: string, и ваш код кажется неправильным с такими изменениями, как использование std :: cout вместо обычного cout. Другая вещь, с которой вам следует быть осторожным, это связывать ваши файлы, особенно файлы в разных каталогах. Вы должны указать блокам кода, что нужно найти этот print.cpp, перейдя в опцию build, и перейдите в каталог с вкладками поиска и укажите, где print.cpp другой, другой подход — просто создать проект, который будет иметь основной. cpp, а затем добавить класс print.cpp в текущий проект. Надеюсь, это поможет

0
По вопросам рекламы [email protected]