2014-01-14 3 views
0
#include<iostream.h> 
    class man 
    { 
    public: 
    void money() 
    { 
    for(int i=0;i<5;i++) 
    cout<<i; 
    } 

    }; 

    void main() 
    { 

     man m; 
     m.money(); 

    } 

Когда это скомпилировано, предупреждение отображается как «Функции, содержащие для не расширенного встроенного». Почему это так?Почему эта программа показывает предупреждение о компиляции?

+1

Какой компилятор с флагами? – Shoe

+0

Какой компилятор вы используете? –

+5

Потому что похоже, что вы используете TurboC++, которому более 20 лет. –

ответ

2

Функции, определенные в классе, который по умолчанию считается спецификатором функции inline, даже если вы не указали его явно. Однако не все функции могут быть встроены компилятором. Компилятор рассказывает об этом.

Учтите, что если вы используете современный компилятор, он не будет компилировать код. Идентификатор cout будет не объявлен, поскольку вы не указали его пространство имен, а основная функция должна иметь тип возврата int.

Кроме того, я хотел бы объявить функцию money с const классификаторе:

void money() const; 
+0

@rightfold Спасибо. :) –

0

TurboC++ очень старый компилятор и по сегодняшним меркам довольно дефицитный по сравнению с стандартизированной C++. Когда вы включаете определение функции-члена внутри определения класса, функция неявно встроена. Вы получаете предупреждение, потому что TurboC++ не имеет возможности встроить функции, содержащие определенные языковые конструкции. В этом случае цикл for не позволяет встроить компилятор. Это не относится к более старым часто используемым компиляторам, таким как GCC и MSVC, поскольку они способны встроить функции.

Хотя я обычно не рекомендую игнорировать предупреждения, сгенерированные с помощью цепочки инструментов, я думаю, что это вполне оправдано в этом случае. Игнорируйте его и продолжайте.

Смежные вопросы