是否可以使用auto类方法初始化自动变量?

时间:2017-02-23 10:52:39

标签: c++ c++14

我遇到了一些关于使用c ++ 14的auto说明符的问题。

我在头文件中定义了类,如下所示

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;
}

然后用g ++编译,我得到以下错误:

  

test.cpp:21:30:错误:在扣除auto MiscFeature::getData()之前使用auto

auto val = misc->getData();

如果我在主文件中定义类似的功能,那没关系。

我怎么能解决这个问题?或者这是一个限制?

1 个答案:

答案 0 :(得分:0)

我想我找到了问题的答案 当使用auto说明符声明类成员时,在调用该方法时,应该定义并知道该函数 但是,在我上面的代码示例中,主文件只引用了头文件,因此该函数仍然是未知的。所以编译器抱怨说。
然后我在头文件中声明了另一个内联函数并再次测试。 代码如下,

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;

然后再次编译并运行它,它有效。