Я написал код, разбитый на несколько файлов .h, .cpp. две функции принимают аргументы строкового типа (фрагмент кода ниже) Я получаю эту ошибку:
/usr/bin/ld: /tmp/cclLgueo.o: in function `main':
main.cpp:(.text+0x1dc): undefined reference to `doloop(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >)'
/usr/bin/ld: main.cpp:(.text+0x238): undefined reference to
`detect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: error: ld returned 1 exit status
Что это значит? Код:
//File: main.cpp (fragment)
string loop;
doloop(loop);
Заголовок:
#ifndef func_h
#define func_h
#include <string>
using namespace std;
void detect(string cmd);
... void
void doloop(string con);
... void
#endif
func.cpp:
void doloop(string con)
{
short y; // Fragment
}
//detect function is similar
##Команда компилятора: "g++ main.cpp"
Я просто напомнил себе тот самый "g++ main.cpp"
Вам нужно скомпилировать все единицы перевода:
g++ func.cpp main.cpp
/usr/bin/ld: /tmp/ccBT2Up3.o:(.bss+0x0): множественное определение board'; /tmp/ccd85wOB.o:(.bss+0x0): first defined here /usr/bin/ld: /tmp/ccBT2Up3.o:(.bss+0x1d4c0): multiple definition of
указателя'; /tmp/ccd85wOB.o:(.bss+0x1d4c0): впервые определено здесь collect2: error: ld вернул 1 статус выхода
@Maniues Добавьте защиту (например, #pragma once
) в ваши файлы заголовков.
Я добавил, а ошибка все еще возникает
Я воспроизвел исходный код и заголовки из вашего вопроса, и он нормально компилируется (учитывая, что вы включаете файл заголовка в правильные исходные файлы).
У меня есть 2 заголовка: vars.h func.h в vars.h У меня есть int *pointer и int board[1000] в main.cpp/func.cpp: #include "vars.h" #include "func.h >
Вы получаете сообщение об ошибке из-за заголовка, который я не вижу и, следовательно, не могу исправить. Кроме того, проблема больше не связана с компиляцией, а с определением ваших файлов заголовков, поэтому опубликуйте их все. Задайте свою проблему в отдельном вопросе и отметьте этот ответ как принятый, чтобы закрыть проблему.
К сожалению, я не могу опубликовать следующий вопрос...
Вы упомянули содержание в vars.h
, что содержит func.h
?
vars.h - переменные. func.h — функции (например: int function(); )
Какова ваша команда компиляции?