C++ 代码在 VS2010 中工作,但在 2013 年不工作
Posted
技术标签:
【中文标题】C++ 代码在 VS2010 中工作,但在 2013 年不工作【英文标题】:C++ code working in VS2010 but not in 2013 【发布时间】:2014-07-10 17:26:13 【问题描述】:我有一个特殊的问题。我的应用程序中的代码在 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:\consoleapplication1\consoleapplication1\consoleapplication1.cpp 13 1 ConsoleApplication1
2 IntelliSense: function "value" cannot be called with the given argument list
argument types are: (const ABC) c:\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.cpp 13 35 ConsoleApplication1
我在 *** 和 Google 上搜索了很多,但都没有运气。
【问题讨论】:
不确定 V2010 如何编译该代码,但您将value
作为成员数据和成员函数。这是不合法的。
你想做什么?为什么要写这么多代码?
不能与 Microsoft Visual Studio 2010 版本 10.0.30319.1 RTMRel 一起编译:
请不要在一周后以使给定答案无效的方式编辑您的问题。相反,请尝试隔离您正在努力解决的问题并将其作为新问题发布。
【参考方案1】:
我很惊讶这是在 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_;
;
Live demo
另一种选择,我更喜欢自己,是将内联 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_;
;
Live demo
【讨论】:
以上是关于C++ 代码在 VS2010 中工作,但在 2013 年不工作的主要内容,如果未能解决你的问题,请参考以下文章
DeviceIoControl 在 C++ 和 C# 中工作,但在 C++/CLI 中调用时返回 ERROR_INVALID_FUNCTION
变量 args SFINAE 默认构造函数在 clang 中工作,但在 Visual Studio 2015 中失败
NuxtJS:在开发中工作但在生产中工作的路由(netlify)