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

Is it possible to initialize auto variable with auto class method?

本文关键字:变量 初始化 类方法 可以使 是否      更新时间:2023-10-16

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

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

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 ++编译,我得到以下错误:

测试.cpp:21:30:错误:扣除auto前使用auto MiscFeature::getData()

auto val = misc->getData();

如果我在主文件中定义类似的函数,没关系。

我该如何解决这样的问题?还是这是一个限制?

我想我找到了问题的答案。
由于类成员是使用 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;

然后编译并再次运行它,它起作用了。