Форум программистов, компьютерный форум CyberForum.ru

Ссылка на неразрешенный внешний символ - C++

Восстановить пароль Регистрация
 
Laix
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 64
14.11.2013, 10:55     Ссылка на неразрешенный внешний символ #1
Что это?
Как я понял это какая то переменная/функция, которая некотором образом не видна другой функции.
Но почему ошибка возникает на этапе линковки?

Вот например моя ошибка:
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ "void __cdecl filter(char *)" (?filter@@YAXPEAD@Z) в функции "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class DataCall &)" (??5@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@std@@AEAV01@AEAVDataCall@@@Z)
Собственно функция filter(удаляет пробелы слева и справа от строки, если есть):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void filter(char*a)
{   int i,l=strlen(a),j;
    for(i=0;i<l;i++)
        if(a[i] !=' '&& a[i]!= '\t')
            for(j=l-1;j>=i;j--)
                if(a[j] !=' '&& a[j]!= '\n')
                    {
                        for(l=i;l<=j;l++)
                        a[l-i]=a[l];
                        a[l-i]='\0';
                        goto m;
                    }
    a[0]=0;
    m:;
}
Тот самый оператор, который похоже и ругается на функцию фильтр:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
istream& operator>>( istream& in, DataCall& Obj )
{
    char T[80];
 
    in.getline( Obj.fio, 22 );
    filter( Obj.fio );
    in.getline( Obj.address, 24 ); 
    filter( Obj.address );
    in.getline( Obj.number, 14 );
    filter( Obj.number );
    in.getline( Obj.date, 11 );
    filter( Obj.date );
 
    in >> Obj.duration;
    in.getline( T, 80 );
 
    return in;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
14.11.2013, 11:02     Ссылка на неразрешенный внешний символ #2
а это все в одном срр файле? ошибка линкера значит, что компилятор знает, что фукнция void filter(char*a) существует, то линкер не может найти ее реализацию
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
14.11.2013, 11:38     Ссылка на неразрешенный внешний символ #3
Laix, мне кажется, что в функции filter вам надо перед всеми a поставить звездочки. А то вы значениям адресов пробелы удаляете получается.
Laix
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 64
14.11.2013, 20:07  [ТС]     Ссылка на неразрешенный внешний символ #4
Цитата Сообщение от I.M. Посмотреть сообщение
а это все в одном срр файле? ошибка линкера значит, что компилятор знает, что фукнция void filter(char*a) существует, то линкер не может найти ее реализацию
ммм нет.
у меня два класса(на перегрузку во сторому классе компилятор также ругается).их объявления и определения методов лежат в заголовочном файле. фильтр же лежит в файле code.cpp. также присутствует файл main.cpp.
пробовал перемещать функцию фильтр в заголовочный(удаляя её из code.cpp) - та же ошибка.
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
14.11.2013, 21:34     Ссылка на неразрешенный внешний символ #5
Laix, а можно полный код из всех файлов с укуазанием откуда они
Laix
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 64
14.11.2013, 21:46  [ТС]     Ссылка на неразрешенный внешний символ #6
Цитата Сообщение от Angeline Посмотреть сообщение
Laix, а можно полный код из всех файлов с укуазанием откуда они
проблема решилась. разместил фильтр в заголовочный файл.
странно но вчера так не помогло. видимо это какие то глюки Qt creator.
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
14.11.2013, 21:55     Ссылка на неразрешенный внешний символ #7
Laix, поздравляю, я с этими error LNK намучалась.
Laix
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 64
15.11.2013, 00:14  [ТС]     Ссылка на неразрешенный внешний символ #8
Angeline, тоже Qt creator?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.11.2013, 00:48     Ссылка на неразрешенный внешний символ #9
Цитата Сообщение от Angeline Посмотреть сообщение
Laix, мне кажется, что в функции filter вам надо перед всеми a поставить звездочки. А то вы значениям адресов пробелы удаляете получается.
улыбнула фраза)))
там везде в теле функции - "a" понимается как указатель
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 11:32     Ссылка на неразрешенный внешний символ
Еще ссылки по теме:

Ссылка на неразрешенный внешний символ C++
C++ Ссылка на неразрешенный внешний символ
C++ Ссылка на неразрешенный внешний символ

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
15.11.2013, 11:32     Ссылка на неразрешенный внешний символ #10
Laix, нет, visual c++.

abit, ну, а ,как указатель, значит это адрес.
Yandex
Объявления
15.11.2013, 11:32     Ссылка на неразрешенный внешний символ
Ответ Создать тему
Опции темы

Текущее время: 13:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru