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.
Я добавил каталог; Проект> Параметры сборки> Поиск по каталогам и добавление текущего рабочего каталога.
Все файлы находятся в одном консольном проекте в блоках кода
Я считаю, что вы должны прочитать немного больше об использовании пространств имен. Вам не хватает 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!
Вы должны получить больше, чем эта ошибка компоновщика, так как вы используете string
без какого-либо пространства имен в вашем print.cpp
файл. И если этот исходный файл не компилируется, он не может быть связан с ним, и вы получите ошибку компоновщика, которая у вас есть.
Изменить, например, на
void echo(std::string code) { ... }
а вы делать попробуйте связать с объектным файлом, созданным из print.cpp
?
Я знаю, что это старая версия, но для тех, кто хочет решить эту проблему, решение может быть следующим. Если у вас есть g ++, следуйте c ++ 11 под опциями project-> build (все равно проверьте ваши настройки), тогда вы должен установите этот флажок для все файлы, которые вы делаете в проекте для устранения ошибки. У меня тоже была эта раздражающая неопределенная ссылка, но теперь она исчезла!
Попробуйте «Project / Properties / Build Targets tab». Там вы должны найти поле «Build target files». В этом поле найдите «print.cpp» и установите флажок (теперь компилятор создаст print.cpp).
Некоторая полезная информация по управлению проектами в ЦБ
http://www.codeblocks.org/docs/main_codeblocks_en.html
При работе со строками в C ++ лучше всего подавать в суд на std :: string, и ваш код кажется неправильным с такими изменениями, как использование std :: cout вместо обычного cout. Другая вещь, с которой вам следует быть осторожным, это связывать ваши файлы, особенно файлы в разных каталогах. Вы должны указать блокам кода, что нужно найти этот print.cpp, перейдя в опцию build, и перейдите в каталог с вкладками поиска и укажите, где print.cpp другой, другой подход — просто создать проект, который будет иметь основной. cpp, а затем добавить класс print.cpp в текущий проект. Надеюсь, это поможет