c++代码在VS2010中工作,但在2013中不工作
C++ code working in VS2010 but not in 2013
我有一个特殊的问题。我的应用程序中的代码在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_; }
};
现场演示
相关文章:
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 编译在我的 Mac 上工作,但在集群 (Linux) 上不起作用
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- C++代码在台式机上工作正常,但在笔记本电脑上则不行
- 实现 DFS 在较短的输入下工作正常,但在较大的输入下会抛出分段错误
- 代码在Visual Studio 2017中不起作用,但在VS代码中工作
- 请发现它在 dev 中工作的错误,但在 hackerrank 中不起作用
- OpenCV Tracker 属性访问在 ARM 上因 SEGFAULT 而失败,但在 X86_64 中工作
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- SIGABRT 和线程相关的异常,但在调试期间工作正常
- ostream_iterator运算符=在pair<int,int>上失败,但在包装器类上工作。我不能为成对<>重载运算符<<吗?
- .exe应用程序在windows10中创建新模块时抛出错误,但在windows7中工作正常
- 为什么这在 c++ 中不起作用,但在 python 中工作
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- PlayFunction在DLL中不起作用,但在独立的exe中工作
- mkdir 从命令行工作,但在使用 NFS 时C++失败
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- C++代码在 Linux 上按预期工作,但在 Windows 上则不然
- 设备与Visa在Python中工作的通信,但在C 中不进行
- 错误:从初始值设定项列表向数组赋值;在ubuntu 1004上工作但在14.04上不工作的代码