Короче у меня есть класс. Он находится в 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: Проблема с инлайн реализацией метода в файле реализации
Здравствуйте, reptile, Вы писали:
R>Короче у меня есть класс. Он находится в h-файле. Мне нужно добавить метод, который находился бы в cpp-файле реализации данного класса, и при этом был инлайн-методом. R>Но как только я добавляю для класса inline модификатор, то возникает ошибка linker R>о том что не удается найти точку входя для данной функции?
Ну так ты и объявляй inline-ом тот метод, что должен таковым быть, а не класс.
/**
* у человека столько проблем, сколько он их себе создает
*/
Re: Проблема с инлайн реализацией метода в файле реализации
Здравствуйте, reptile, Вы писали:
R>Короче у меня есть класс. Он находится в h-файле. Мне нужно добавить метод, который находился бы в cpp-файле реализации данного класса, и при этом был инлайн-методом. R>Делается все это на VC++7.1 R>Но как только я добавляю для класса inline модификатор, то возникает ошибка linker R>о том что не удается найти точку входя для данной функции? R>А так вообще можно делать, на сколько я знаю можно!
R>ПОМОГИТЕ плиз!!!
Определение inline — метода должно присутствовать в каждой еденице трансляции, в которой он (метод) используется. Самый простой и безопасный метод добиться этого — поместить определение метода в заголовок.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Проблема с инлайн реализацией метода в файле реализац
> Определение inline-метода должно находиться в каждой единице трансляции, где метод используется. Т.е. его нельзя не включать в тот файл, где он вызывается.
Это справедливо лишь для "классической" схемы компиляции и последующей линковки.
Студии начиная с седьмой и Intel компиляторы могут использовать отличную схему, которые позволяют осуществить встраивание функции из другого модуля: MS — link-time code generation, Intel — Inter Procedural Optimization (IPO).
ME>Студии начиная с седьмой и Intel компиляторы могут использовать отличную схему, которые позволяют осуществить встраивание функции из другого модуля: MS — link-time code generation, Intel — Inter Procedural Optimization (IPO).
Да, но только это не означает, что я могу законно писать
//a.hclass A
{
public:
void fun()const;
};
//user.cppint main()
{
A a;
a.fun();
}
//a.cppinline void A::fun()const
{
}
Это (IPO) в моем понимании лишь означает, что в приведенном примере (только без inline) компилятор может в принципе встроить A::fun. Или я все — таки не прав?
Of course, the code must be complete enough to compile and link.
Re[4]: Проблема с инлайн реализацией метода в файле реализац
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). > > Да, но только это не означает, что я могу законно писать >
> > Это (IPO) в моем понимании лишь означает, что в приведенном примере (только без inline) компилятор может в принципе встроить A::fun. Или я все — таки не прав?
Не понял вопроса.
В той ссылке достаточно подробно описано как работает link-time code generation.
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]: Проблема с инлайн реализацией метода в файле реализац
Lorenzo_LAMAS wrote:
> reptile писал неправильную программу, объявляя в файле реализации функцию-член как inline и пытаясь затем ее вызвать из другой единицы трансляции. Аноним его поправил. Ты стал поправлять анонима, непонятно, зачем. IPO и LC... не помню акроним не позволяют тебе писать неправильные программы и поэтому reptile'у от этих МЕГА фич толку мало.
Все что я хотел сказать — это то, что существует возможность, что ф-ция будет встроена, даже если она находится в другой единице трансляции.