相关疑难解决方法(0)

静态常量字符串(类成员)

我想为一个类(在这种情况下是一个形状工厂)有一个私有静态常量.

我想要有类似的东西.

class A {
   private:
      static const string RECTANGLE = "rectangle";
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我从C++(g ++)编译器中得到了各种错误,例如:

ISO C++禁止成员'RECTANGLE'的初始化

非整数类型'std :: string'的静态数据成员的无效类初始化

错误:使'RECTANGLE'静止

这告诉我这种成员设计不符合标准.如何在不使用#define指令的情况下拥有私有文字常量(或者可能是公共的)(我想避免数据全局性的丑陋!)

任何帮助表示赞赏.

c++ string static const class

429
推荐指数
8
解决办法
35万
查看次数

Visual Studio 2010 C++是否完全支持类内const变量?

这个问题是密切相关的先前问了一个问题在这里.

为了使Visual Studio 2010 C++调试器能够解析类内初始化的const变量,必须提供变量的全局定义.


例如

这是类定义:

class B{
  public:
   static const int m_b=100;
};
Run Code Online (Sandbox Code Playgroud)

以下是该成员的全局范围定义:

const int B::m_b;
Run Code Online (Sandbox Code Playgroud)

没有全局定义代码可以工作,但调试器在B的方法中看不到m_b.

然而,这导致另一个问题.在非平凡的头文件包含安排(下面给出的完整代码)中,Visual Studio产生此链接错误:

error LNK2005: "public: static int const B::m_b" (?m_b@B@@2HB) already defined in a.obj
1>a.exe : fatal error LNK1169: one or more multiply defined symbols found
Run Code Online (Sandbox Code Playgroud)

但是,GCC成功编译,链接和运行代码.

这是有问题的代码:

文件a.cpp:

#include <iostream>
#include "a.h"

const int B::m_b;

int main()
{
    B b;
    std::cout << b.m_b;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

档案啊:

#pragma once

#include "b.h"
Run Code Online (Sandbox Code Playgroud)

文件b.cpp:

#include "b.h"
Run Code Online (Sandbox Code Playgroud)

文件bh: …

c++ gcc scope initialization visual-studio

3
推荐指数
1
解决办法
1182
查看次数

标签 统计

c++ ×2

class ×1

const ×1

gcc ×1

initialization ×1

scope ×1

static ×1

string ×1

visual-studio ×1