1 / 1 / 0
Регистрация: 06.06.2012
Сообщений: 13
|
||||||
1 | ||||||
Дружественная функция, объявлённая ранее вне пространства имён класса -> error LNK2019 в Visual Studio 201225.12.2012, 17:41. Показов 1739. Ответов 5
Метки нет (Все метки)
Всем привет. Долгое время пытался откопать ответ в гугле, но не получилось. Заранее благодарен.
Код
1> main.cpp 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl space::f(void)" (?f@space@@YAXXZ) в функции "public: __thiscall space::ok::ok(void)" (??0ok@space@@QAE@XZ) 1>D:\Self-Education\С++\Project\main\Debug\main.exe : fatal error LNK1120: неразрешенных внешних элементов: 1 Почему?
0
|
25.12.2012, 17:41 | |
Ответы с готовыми решениями:
5
Обращение к приватному члену класса внутри пространства имён Скажите если я напишу программу на C# в MS Visual studio 2012 на framework 3.5 я потом смогу открыть проект моей программы на MS Visual studio 2008 Как открыть проект созданный в Visual Studio 2012 в Visual Studio 2008? Не работает отладка кода в Visual Studio pro 2012+qt visual studio add-in 1.2.1 |
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
|
|||||||||||
25.12.2012, 19:09 | 2 | ||||||||||
Я не пойму что вам нужно.
1. Если у вас должна быть одна f(), то тогда сотрите void f(){};, и после интерфейса класса определите её.
0
|
1 / 1 / 0
Регистрация: 06.06.2012
Сообщений: 13
|
|
25.12.2012, 19:39 [ТС] | 3 |
Мне нужно объяснить, почему "friend void f();" работает так, как будто ранее эта функция никогда не объявлялась.
То есть я ожидал, что "friend void f();" объявит ::f() дружественной, потому что не найдя в области "space", компилятор бы начал искать объявление в глобальной области. А на деле происходит, что объявления f() в глобальной области не видно (или оно даже не ищется?) и получается, что f() помещается в область "space". Или я могу поставить свой вопрос по другому: Почему, чтобы мой код корректно работал, нужно использовать "friend void ::f()". Поиск объявления (в случае объявления дружественности) идёт только по области видимости, в которой расположено объявление класса?
0
|
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
|
||||||
25.12.2012, 19:51 | 4 | |||||
mamucho666,
допустим у вас есть две переменные х, одна локальная, вторая глобальная. Ну так вот сначала идёт всегда локальная, тоесть если вы напишите х = 10, то это означает, что локальная = 10, чтобы получить доступ к глобальной, с таким же именем (х) нужно указать глобальную область видимости ::х = 10. С функциями в вашем примере так же. Добавлено через 2 минуты Но есть одно но. Добавлено через 56 секунд
0
|
1 / 1 / 0
Регистрация: 06.06.2012
Сообщений: 13
|
|
25.12.2012, 21:18 [ТС] | 5 |
Это понятно, но продолжая пример с переменными, хочу заметить, что у меня нет локальных переменных.
На всю программу есть только одно объявление функции f() и оно в самой первой строке. Оно же глобальное. Где локальная функция? P.S. Или само по себе объявление функции дружественной "friend void f();" и является её объявлением? В контексте моего кода локальным?
0
|
Неэпический
|
||||||
25.12.2012, 22:38 | 6 | |||||
Ошибка линковщика. У Вас нет реализации функции f() и линковщик не может её найти. Поэтому и выдает ошибку:
0
|
25.12.2012, 22:38 | |
25.12.2012, 22:38 | |
Помогаю со студенческими работами здесь
6
Стоит ли переходить на Visual Studio 2013 Express c Visual Studio 2012 Ultimate Как проект на visual studio 2012 открыть на visual studio 2008 При создании проекта класса WPF не видит некоторые пространства имён Visual Studio 2012 Ошибка 1 error : Required file "tracker.exe" is missing. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |