Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Undefined reference to function - как корректно объявить / 10 сообщений из 10, страница 1 из 1
17.02.2016, 17:24
    #39173407
Aleksey K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
В проекте есть следующий заголовочный файл (и соотвествующий cpp):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include <string>
#include <vector>

#ifndef STRINGWORK_H
#define STRINGWORK_H

using namespace std;

vector<string> split(const string& str, const string &delimiters = " ");
string trim(string &str);

#endif // STRINGWORK_H


При сборке получаю ошибку линковщика:

Код: plaintext
    file.cpp:21: error: undefined reference to `trim(std::string&)'

Если добавляю
Код: plaintext
1.
extern "C"

ко 2-й функции, то проект собирается нормально. Но если также добавить
Код: plaintext
1.
extern "C"

к 1-й функции, то получаю ошибку линковки уже на 1-й функции:

Код: plaintext
    file.cpp:16: error: undefined reference to `split'


В чём проблема, как корректно объявлять такие функции? Компилятор g++ 5, Linux.

--
С уважением,
Алексей.
...
Рейтинг: 0 / 0
17.02.2016, 17:35
    #39173420
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
Aleksey Kесть следующий заголовочный файл (и соотвествующий cpp)
Очевидно, не соответствующий: сигнатура trim из него не соответствует заголовку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.02.2016, 17:37
    #39173423
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
Очень сомнительно, что шаблон можно объявить как extern C
...
Рейтинг: 0 / 0
17.02.2016, 17:55
    #39173448
Aleksey K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
Dimitry SibiryakovAleksey Kесть следующий заголовочный файл (и соотвествующий cpp)
Очевидно, не соответствующий: сигнатура trim из него не соответствует заголовку.
Соответствует. Оказывается нужно добавить
Код: plaintext
1.
extern "C" 


в cpp файл также в обе функции - тогда собирается без проблем.
...
Рейтинг: 0 / 0
17.02.2016, 17:56
    #39173449
Aleksey K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
...
Рейтинг: 0 / 0
17.02.2016, 18:05
    #39173459
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
SiemarglОчень сомнительно, что шаблон можно объявить как extern Cбез последствий в смысле.
Например конфликта с дугой специализацией split<>
...
Рейтинг: 0 / 0
17.02.2016, 18:31
    #39173487
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
Aleksey KСоответствует.
Докажи. Скопипасть строчку из cpp.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.02.2016, 18:39
    #39173496
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
Не проснулся еще. Это же не шаблон.

А для шаблонов да >error: template with C linkage
...
Рейтинг: 0 / 0
18.02.2016, 01:37
    #39173674
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
Aleksey KВ проекте есть следующий заголовочный файл (и соотвествующий cpp):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include <string>
#include <vector>

#ifndef STRINGWORK_H
#define STRINGWORK_H

using namespace std;

vector<string> split(const string& str, const string &delimiters = " ");
string trim(string &str);

#endif // STRINGWORK_H




Ну как бы тут уже есть куча проблем...
Должно быть так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#ifndef STRINGWORK_H
#define STRINGWORK_H

#include <string>
#include <vector>

// НИКОГДА НЕ ДЕЛАЙ ТАК!!
// using namespace std;

std::vector<std::string> split(const std::string& str, const std::string &delimiters = " ");
std::string trim(std::string &str);

#endif // STRINGWORK_H
...
Рейтинг: 0 / 0
18.02.2016, 01:40
    #39173676
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Undefined reference to function - как корректно объявить
Aleksey KВ чём проблема, как корректно объявлять такие функции? Компилятор g++ 5, Linux.



Проблема в том, что ты не понимаешь, что ты делаешь, и пытаешься методом тыка пальцем в небо
добиться какого-то (причём неведомого тебе) результата.

Если у тебя эти две функции объявлены в какой-то библиотеке, то тебе не нужно объявлять их снова ,
а нужно просто подключить заголовочный файл от этой библиотеки с помощью директивы #include.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Undefined reference to function - как корректно объявить / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]