我用的是GCC 4.8.2:
$ g++ --version
g++ (GCC) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
我有这样的定义:
#pragma once
#in
我有这个密码
class Move
{
public:
Move()
{
name = "";
type_num = 18;
power = 0;
accuracy = 0;
type = "???";
}
Move(string a, int b, int c, int d)
{
name = a;
typ
我试图定义如下所示的公共静态变量:
public :
static int j=0; //or any other value too
我在这一行上得到了一个编译错误: ISO C++禁止非const静态成员‘J’的类初始化。
为什么C++不允许这样做?
为什么允许初始化const成员?
这是否意味着C++中的静态变量没有像C那样用0初始化?
谢谢!
类内定义是否违反ODR规则?
Bjarne的声明如下:
类通常在头文件中声明,而头文件通常包含在许多翻译单元中。然而,为了避免复杂的链接器规则,C++要求每个对象都有一个唯一的定义。如果C++允许在类中定义需要作为对象存储在内存中的实体,则该规则将被打破。
class foo
{
float f = 1.1f;
int i = 1;
string s = "foo";
long long ll = 44ll;
};
这是议员的实际定义吗?这违反了ODR规则吗?如果没有,通过构造函数进行初始化的好处是什么?
struct A
{
int a = 5; //OK
const int b = 5; //OK
static const int c = 5; //OK
static int d = 5; //Error!
}
error: ISO C++ forbids in-class initialization of non-const static member 'A::d'
为什么会这样呢?有人能给我解释一下背后的原因吗?
请有人给我指点一下C++标准的相应段落,或者如果我取消对文本({123})的注释,可以提供一些解释为什么我的代码不编译吗?
一般来说,我理解通过初始化程序列表使用默认成员初始化和初始化有什么问题,但我不能引用确切的原因。
enum class MY: int
{
A = 1
};
struct abc
{
int a;/*{123};*/ //compilation failed if uncommented
MY m;
};
abc a = {1, MY::A};
编译器错误,在未注释文本的情况下:
错误:无法将“{1,A}”从“”转换为“abc”
为了避免复杂的链接器规则,C++要求每个对象都有一个唯一的定义。如果C++允许在类中定义需要作为对象存储在内存中的实体,则该规则将被打破。
我很难理解这一点:
class Y {
const int c3 = 7; // error: not static
static int c4 = 7; // error: not const
static const float c5 = 7; // error: not integral
static const int c6 = 7;
};
const int c6 = 7;是如何违
我对C++完全陌生,所以请耐心听我说。我想创建一个具有静态数组的类,并从main访问此数组。下面是我想在C#中做的事情。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Class a = new Class();
Console.WriteLine(a.arr[1]);
}
}
看看这个非常基本的C++代码:
class Class1 {
};
Class1 c1;
class Class2
{
public:
Class2(Class1 &c)
{
}
};
// Class2 abcd(c1); // OK outside declaration
class Class3
{
public:
Class2 abcd(c1); // Declaration of abcd as field -> error: unknown type name 'c1'
};
关于abcd声明有一些我
我有一个关于C++中静态类成员的问题。根据我对C++的理解,静态类号应该在类的实例创建之前就存在了。可以初始化常量静态成员变量,但是对于非常数静态成员,我们不能在类中初始化它。因此,我的问题是我们应该在哪里初始化非常量静态类。在我看来,非常量静态类的唯一阶段是在主程序运行之前,如以下代码所示:
using namespace std;
class C
{
public:
static int Value;
};
int C::Value = 2;
int main()
{
// int C::