Проблема с инлайн реализацией метода в файле реализации
От: reptile  
Дата: 01.02.04 19:57
Оценка:
Короче у меня есть класс. Он находится в h-файле. Мне нужно добавить метод, который находился бы в cpp-файле реализации данного класса, и при этом был инлайн-методом.
Делается все это на VC++7.1
Но как только я добавляю для класса inline модификатор, то возникает ошибка linker
о том что не удается найти точку входя для данной функции?
А так вообще можно делать, на сколько я знаю можно!

ПОМОГИТЕ плиз!!!
Re: Проблема с инлайн реализацией метода в файле реализации
От: Аноним  
Дата: 01.02.04 20:17
Оценка:
Здравствуйте, reptile, Вы писали:

R>Короче у меня есть класс. Он находится в h-файле. Мне нужно добавить метод, который находился бы в cpp-файле реализации данного класса, и при этом был инлайн-методом.

R>Делается все это на VC++7.1
R>Но как только я добавляю для класса inline модификатор, то возникает ошибка linker
R>о том что не удается найти точку входя для данной функции?
R>А так вообще можно делать, на сколько я знаю можно!

R>ПОМОГИТЕ плиз!!!


Определение inline-метода должно находиться в каждой единице трансляции, где метод используется. Т.е. его нельзя не включать в тот файл, где он вызывается.
Re: Проблема с инлайн реализацией метода в файле реализации
От: Par-zzz  
Дата: 02.02.04 03:42
Оценка:
Здравствуйте, reptile, Вы писали:

R>Короче у меня есть класс. Он находится в h-файле. Мне нужно добавить метод, который находился бы в cpp-файле реализации данного класса, и при этом был инлайн-методом.

R>Но как только я добавляю для класса inline модификатор, то возникает ошибка linker
R>о том что не удается найти точку входя для данной функции?

Ну так ты и объявляй inline-ом тот метод, что должен таковым быть, а не класс.
/**
* у человека столько проблем, сколько он их себе создает
*/
Re: Проблема с инлайн реализацией метода в файле реализации
От: Bell Россия  
Дата: 02.02.04 07:27
Оценка:
Здравствуйте, reptile, Вы писали:

R>Короче у меня есть класс. Он находится в h-файле. Мне нужно добавить метод, который находился бы в cpp-файле реализации данного класса, и при этом был инлайн-методом.

R>Делается все это на VC++7.1
R>Но как только я добавляю для класса inline модификатор, то возникает ошибка linker
R>о том что не удается найти точку входя для данной функции?
R>А так вообще можно делать, на сколько я знаю можно!

R>ПОМОГИТЕ плиз!!!


Определение inline — метода должно присутствовать в каждой еденице трансляции, в которой он (метод) используется. Самый простой и безопасный метод добиться этого — поместить определение метода в заголовок.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Проблема с инлайн реализацией метода в файле реализац
От: MaximE Великобритания  
Дата: 02.02.04 21:16
Оценка: 4 (1)
> Определение inline-метода должно находиться в каждой единице трансляции, где метод используется. Т.е. его нельзя не включать в тот файл, где он вызывается.

Это справедливо лишь для "классической" схемы компиляции и последующей линковки.

Студии начиная с седьмой и Intel компиляторы могут использовать отличную схему, которые позволяют осуществить встраивание функции из другого модуля: MS — link-time code generation, Intel — Inter Procedural Optimization (IPO).

Under The Hood: Link-time Code Generation -- MSDN Magazine, May 2002

--
Maxim Egorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/
Posted via RSDN NNTP Server 1.8 beta
Re[3]: Проблема с инлайн реализацией метода в файле реализац
От: Lorenzo_LAMAS  
Дата: 03.02.04 07:21
Оценка: +1
ME>Студии начиная с седьмой и Intel компиляторы могут использовать отличную схему, которые позволяют осуществить встраивание функции из другого модуля: MS — link-time code generation, Intel — Inter Procedural Optimization (IPO).

Да, но только это не означает, что я могу законно писать
//a.h
class A
{
public:
    void fun()const;
};

//user.cpp
int main()
{
    A a;
    a.fun();
}

//a.cpp
inline void A::fun()const
{
}


Это (IPO) в моем понимании лишь означает, что в приведенном примере (только без inline) компилятор может в принципе встроить A::fun. Или я все — таки не прав?
Of course, the code must be complete enough to compile and link.
Re[4]: Проблема с инлайн реализацией метода в файле реализац
От: MaximE Великобритания  
Дата: 03.02.04 17:37
Оценка:
On Tue, 03 Feb 2004 07:21:30 GMT, Lorenzo_LAMAS <14979@news.rsdn.ru> wrote:

> ME>Студии начиная с седьмой и Intel компиляторы могут использовать отличную схему, которые позволяют осуществить встраивание функции из другого модуля: MS — link-time code generation, Intel — Inter Procedural Optimization (IPO).

>
> Да, но только это не означает, что я могу законно писать
>
> //a.h
> class A
> {
> public:
>     void fun()const;
> };
>
> //user.cpp
> int main()
> {
>     A a;
>     a.fun();
> }
>
> //a.cpp
> inline void A::fun()const
> {
> }
>

>
> Это (IPO) в моем понимании лишь означает, что в приведенном примере (только без inline) компилятор может в принципе встроить A::fun. Или я все — таки не прав?

Не понял вопроса.

В той ссылке достаточно подробно описано как работает link-time code generation.

--
Maxim Egorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/
Posted via RSDN NNTP Server 1.8 beta
Re[5]: Проблема с инлайн реализацией метода в файле реализац
От: Lorenzo_LAMAS  
Дата: 04.02.04 09:19
Оценка:
ME>Не понял вопроса.

Зато я понял.

reptile писал неправильную программу, объявляя в файле реализации функцию-член как inline и пытаясь затем ее вызвать из другой единицы трансляции. Аноним его поправил. Ты стал поправлять анонима, непонятно, зачем. IPO и LC... не помню акроним не позволяют тебе писать неправильные программы и поэтому reptile'у от этих МЕГА фич толку мало.


ME>В той ссылке достаточно подробно описано как работает link-time code generation.


Да, я даже не поленился, почитал. Все так себе и представлял. Такими же общими словами Я только наивно предполагал, что такое было в VC до .Net.
Of course, the code must be complete enough to compile and link.
Re[6]: Проблема с инлайн реализацией метода в файле реализац
От: MaximE Великобритания  
Дата: 04.02.04 16:44
Оценка:
Lorenzo_LAMAS wrote:

> reptile писал неправильную программу, объявляя в файле реализации функцию-член как inline и пытаясь затем ее вызвать из другой единицы трансляции. Аноним его поправил. Ты стал поправлять анонима, непонятно, зачем. IPO и LC... не помню акроним не позволяют тебе писать неправильные программы и поэтому reptile'у от этих МЕГА фич толку мало.


Все что я хотел сказать — это то, что существует возможность, что ф-ция будет встроена, даже если она находится в другой единице трансляции.

--
Maxim Egorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/
Posted via RSDN NNTP Server 1.8 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.