powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / inline
6 сообщений из 6, страница 1 из 1
inline
    #34749001
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть inline ф-ии в .cpp, в .h слов inline нет, все собирается если инлайн ф-ии вызываются только внутри своего же класса

если пытаюсь вызвать из др. модулей - не собирается:
test error LNK2019: unresolved external symbol "public: void __thiscall Test::Tst(void)" (?Tst@Test@@QAEXXZ) referenced in function "public: void __thiscall MemTest::MTest(void)" (?MTest@MemTest@@QAEXXZ)

вот что нашел по этому поводу, но как лечить понять не могу:

MSDNSimilarly, a project that uses function inlining yet defines the functions in a .cpp file rather than in the header file will also get error LNK2001. The header file is included everywhere deemed appropriate, but the functions are only inlined when the .cpp file passes through the compiler; therefore, the linker sees the functions as unresolved externals when used in other modules.
Код: plaintext
1.
2.
3.
4.
5.
TESTCLS.H
class testcls
{
   public:
      void PublicStatMemFunc1(void);
};
Код: plaintext
1.
2.
3.
4.
5.
6.
CLASFUNC.CPP
#include "testcls.h"

inline void testcls::PublicStatMemFunc1(void)
{
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
TEST2.CPP
#include "testcls.h"

int main()
{
 testcls testclsObject;
 testclsObject.PublicStatMemFunc1( );   //This needed for compiler to add entry to table of unresolved symbols
                            //Will cause an LNK2001 because this module cannot
 }                         //  see the implementation of PublicStatMemFunc1( );
...
Рейтинг: 0 / 0
inline
    #34749011
либо держите тело в хедере
дибо не делайте ее инлайном

а иначе как по-вашему должна проходить раздельная компиляция модулей и линковка?
...
Рейтинг: 0 / 0
inline
    #34749017
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Голенков Владимирлибо держите тело в хедере
дибо не делайте ее инлайном

а иначе как по-вашему должна проходить раздельная компиляция модулей и линковка?

может есть какой-то спобос, типа поставить inline в хедере (не работает)
...
Рейтинг: 0 / 0
inline
    #34749174
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> может есть какой-то спобос, типа поставить inline в хедере (не работает)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class B{
private;
        int a;
public:
        inline int get_a(){
                return a;
        }
};

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
inline
    #34749501
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tubrikможет есть какой-то спобос, типа поставить inline в хедере (не работает)
Еще один способ, кроме приведенного ErV - перенести реализацию метода в TESTCLS.H:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class testcls
{
public:
      void PublicStatMemFunc1(void);
};

inline void testcls::PublicStatMemFunc1(void)
{
}
Третий - убрать inline в CLASFUNC.CPP, и оставить все на откуп компилятору. MSVC в этом плане неплохо справляется (/Ob2).
...
Рейтинг: 0 / 0
inline
    #34749860
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за ответы, все понял
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / inline
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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