2017-02-23 124 views
-5

Я встретил некоторую проблему относительно auto спецификатор с использованием C++ 14.Можно ли инициализировать автоматическую переменную с помощью метода auto class?

Я определил класс в заголовочном файле, как показано ниже,

class MiscFeature 
{ 

public: 
    MiscFeature(); 
    auto getData(); 
    auto setData(int); 

private: 
    int data; 

}; 

Затем вызов метода в главном файле,

int 
main(int argc, char** argv) 
{ 

    MiscFeature * misc = new MiscFeature(); 

    auto val = misc->getData(); 
    cout<<val<<endl; 
    val = misc->setData(6); 
    cout<<val<<endl; 
} 

Затем компиляции с г ++, я получил следующие ошибки:

test.cpp:21:30: error: use of auto MiscFeature::getData() before deduction of auto

auto val = misc->getData(); 

Если я определяю аналогичную функцию в основном файле, все в порядке.

Как я могу исправить такую ​​проблему? Или это ограничение?

+1

Показать код! – DeiDei

+0

Возможный дубликат: http://stackoverflow.com/q/42329757 –

+1

Создать [mcve] – user2079303

ответ

0

Я думаю, что нашел ответ на мой вопрос.
Поскольку члены класса объявляются с помощью автоматического спецификатора, при вызове метода функция должна быть определена и известна.
Однако в приведенном выше примере кода основной файл ссылается только на заголовочные файлы, поэтому функция все еще неизвестна. Поэтому компилятор жалуется на это.
Затем я объявил другую встроенную функцию в файле заголовка и снова протестировал ее. код, как показано ниже,

class MiscFeature 
{ 
public: 
    MiscFeature(); 
    int getData(); 
    bool setData(int); 
    auto testauto() { return 7;} 
private: 
    int data; 
}; 

Затем вызова метода testauto() в главном файле, как показано ниже,

auto * misc = new MiscFeature(); 
auto val = misc->getData(); 
cout<<val<<endl; 
auto ret = misc->setData(6); 
cout<<ret<<endl; 
auto val1 = misc->testauto(); 
cout<<val1<<endl; 

Затем скомпилировать и запустить его снова, он работал.