c++代码在VS2010中工作,但在2013中不工作

C++ code working in VS2010 but not in 2013

本文关键字:工作 但在 2013 代码 VS2010 c++      更新时间:2023-10-16

我有一个特殊的问题。我的应用程序中的代码在VS2010中没有任何问题,当我今天将其迁移到VS2013时,它给了我一个错误。

代码为-

#include "stdafx.h"
#include <iostream>
class abc
{
    int value;
public:
    abc() { value = 3;  }
    const int value() const { return ::value(*this); }

    friend const int value(const abc& var){ return var.value; }
};
int _tmain(int argc, _TCHAR* argv[])
{
    abc obj;
    std::cout<<obj.value();
    return 0;
}

抛出以下错误-

Error   1   error C3861: 'value': identifier not found  c:consoleapplication1consoleapplication1consoleapplication1.cpp  13  1   ConsoleApplication1
    2   IntelliSense: function "value" cannot be called with the given argument list
            argument types are: (const ABC) c:ConsoleApplication1ConsoleApplication1ConsoleApplication1.cpp  13  35  ConsoleApplication1

我在StackOverFlow和Google上搜索了很多,但没有运气。

我很惊讶这个编译在VS2010上。除非stdafx.h包含value的函数定义/声明,否则您调用的函数尚未在abc::value()中定义。

abc同时包含一个数据成员和一个名为value的成员函数,这是不允许的。要修复这些错误,请将数据成员value重命名为其他名称(我选择将其命名为value_)。

然后,在定义abc之前提供friend函数的声明。我还去掉了函数返回类型的顶级const s。

class abc;
int value(const abc& var);
class abc
{
    int value_;
public:
    abc() { value_ = 3;  }
    int value() const { return ::value(*this); }
    friend int value(const abc& var){ return var.value_; }
};

现场演示


另一个选项,一个我自己喜欢的,是将内联friend重命名为value()以外的东西,然后将其称为不合格。

class abc
{
    int value_;
public:
    abc() { value_ = 3;  }
    int value() const { return value_fr(*this); }
    friend int value_fr(const abc& var){ return var.value_; }
};

现场演示

相关文章: