如何在Visual c++中使用c++ 11的特性,比如委托构造函数

How can I use C++11 features like delegating constructors in Visual C++ November 2012 CTP?

本文关键字:c++ 构造函数 Visual      更新时间:2023-10-16

我安装了visual c++ 2012年11月CTP,但似乎我做错了,因为我仍然不能使用委托构造函数

  1. 我将平台工具集设置为:Microsoft Visual c++ Compiler Nov2012 CTP (v120_CTP_Nov2012)

  2. 我的代码:

    #pragma once
    #include<string>
    class Hero
    {
    private:
        long id;
        std::string name;
        int level;
        static long currentId;
        Hero(const Hero &hero); //disable copy constructor
        Hero& operator =(const Hero &hero); //disable assign operator
    public:
        Hero();
        Hero(std::string name, int level);
        long GetId() const { return this->id; }
        std::string GetName() const { return this->name; }
        int GetLevel() const { return this->level; }
        void SetName(std::string name);
        void SetLevel(int level);
    };
    

PS:任何关于c++11和visual studio 2012的提示都非常受欢迎。谢谢。

LE:这是实现文件:

#include"Hero.h"
long Hero::currentId = 0;
Hero::Hero(std::string name, int level):name(name), level(level), id(++currentId) 
{
}
Hero::Hero():Hero("", 0)
{
}
void Hero::SetName(const std::string &name) 
{
    this->name = name; 
}
void Hero::SetLevel(const int &level) 
{
    this->level = level; 
}

在无参数构造函数上得到以下错误消息:"Hero"不是"Hero"类的非静态数据成员或基类

你引用的错误信息是由IntelliSense报告的,它还不支持新的c++ 11语言特性。请注意,错误消息的全文如下(强调我的):

智能感知: "Hero"不是类"Hero"的非静态数据成员或基类

十一月CTP的公告声明(强调我的):

虽然提供了一个新的平台工具集,以便将编译器集成为Visual Studio 2012构建环境的一部分,但 VS 2012 IDE,智能感知,调试器,静态分析和其他工具基本保持不变,并且尚未提供对这些新的c++ 11功能的支持。

编译器,其中是由11月CTP更新的,拒绝代码并出现以下错误:

error C2511: 'void Hero::SetName(const std::string &)' : overloaded member function not found in 'Hero'
    c:jmscratchtest.cpp(6) : see declaration of 'Hero'
error C2511: 'void Hero::SetLevel(const int &)' : overloaded member function not found in 'Hero'
    c:jmscratchtest.cpp(6) : see declaration of 'Hero'

这些错误是预料之中的,因为你的代码是病态的(SetLevelSetName的参数在它们的内联声明中是通过值传递的,在它们的定义中是通过引用传递的)。当这些错误被修复后,编译器接受你的代码。