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 函数的声明。我还去掉了函数返回类型上的***consts。

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)

应用程序在 iPad 中崩溃但在 iPad 模拟器中工作正常

VS2010:以 64 位编译 C++ 项目

OpenGL 和 SDL '#version required and missing' 但在调试中工作