powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Undefined reference to function - как корректно объявить
10 сообщений из 10, страница 1 из 1
Undefined reference to function - как корректно объявить
    #39173407
Фотография 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
    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
Undefined reference to function - как корректно объявить
    #39173420
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey Kесть следующий заголовочный файл (и соотвествующий cpp)
Очевидно, не соответствующий: сигнатура trim из него не соответствует заголовку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undefined reference to function - как корректно объявить
    #39173423
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень сомнительно, что шаблон можно объявить как extern C
...
Рейтинг: 0 / 0
Undefined reference to function - как корректно объявить
    #39173448
Фотография Aleksey K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAleksey Kесть следующий заголовочный файл (и соотвествующий cpp)
Очевидно, не соответствующий: сигнатура trim из него не соответствует заголовку.
Соответствует. Оказывается нужно добавить
Код: plaintext
1.
extern "C" 


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

А для шаблонов да >error: template with C linkage
...
Рейтинг: 0 / 0
Undefined reference to function - как корректно объявить
    #39173674
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Undefined reference to function - как корректно объявить
    #39173676
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey KВ чём проблема, как корректно объявлять такие функции? Компилятор g++ 5, Linux.



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

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


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