昨天看过了几个帖子,说是在类中的static const数据成员必须要在构造函数中初始化,下面的代码是按照这个意思编写的么?
如果是为什么会报下列错误?
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
const int i;
A();
private:}A::A()
{
i=10;
}void main()
{}
////////////////////////////////////////////////////////////////////////////////////--------------------Configuration: fas - Win32 Debug--------------------
Compiling...
point.cpp
E:\temp\fas\point.cpp(17) : error C2533: 'A::A' : constructors not allowed a return type
E:\temp\fas\point.cpp(18) : error C2166: l-value specifies const object
Error executing cl.exe.point.obj - 2 error(s), 0 warning(s)
如果是为什么会报下列错误?
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
const int i;
A();
private:}A::A()
{
i=10;
}void main()
{}
////////////////////////////////////////////////////////////////////////////////////--------------------Configuration: fas - Win32 Debug--------------------
Compiling...
point.cpp
E:\temp\fas\point.cpp(17) : error C2533: 'A::A' : constructors not allowed a return type
E:\temp\fas\point.cpp(18) : error C2166: l-value specifies const object
Error executing cl.exe.point.obj - 2 error(s), 0 warning(s)
解决方案 »
- VS2010 MFC错误:String,Bitmap load 失败
- 注册表写入失败?
- vc怎么调用带access参数的查询
- 在CDib类中如何使用以下函数??
- c++程序员的梦魇!--- 内存泄漏!
- 帮忙看看这些头文件是干什么用的
- winxp远程注入线程成功(返回了句柄),但是线程马上就中止了,原因不明
- 通过网页访问服务器DLL,怎么实现?
- 评职称的时候到了,不知道评了有什么好处!~~请前辈们指点
- 请问如果程序实现远程登录的功能
- 谁有《Visual C++ +SQL Server数据库应用实例完全解析》 的光盘?20分奉上。
- 100分请教点Linux socket程序转windows的一些问题
{
public:
const int i;
A();
private: };A::A() : i(10)
{
} void main()
{ }
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
const int i;
A();
private: }; //////////////////////类结束要用分号A::A():i(10) /////////////不是在构造函数,是构造函数初始化列表里
{ }
void main()
{ }
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
static const int i;
A();
private:};A::A():i(12)
{
};
void main()
{ }////////////////////////////////////////////////////////////////////
--------------------Configuration: fas - Win32 Debug--------------------
Compiling...
point.cpp
E:\temp\fas\point.cpp(18) : error C2438: 'i' : cannot initialize static class data via constructor
Error executing cl.exe.fas.exe - 1 error(s), 0 warning(s)
const int A::i = 12;
#include <string>
using namespace std;
class A
{
public:
static const int i;
A();
private:};A::A()
{
cout<<"i is "<<i<<endl;
}; static const int A::i=21;void main()
{
A abc;
}
///////////////////////////////////////////////////////////
--------------------Configuration: fas - Win32 Debug--------------------
Compiling...
point.cpp
E:\temp\fas\point.cpp(22) : error C2720: 'i' : 'static ' storage-class specifier illegal on members
Error executing cl.exe.fas.exe - 1 error(s), 0 warning(s)
这是加上static后的编译结果,但是把static去掉之后能运行,结果正确。还是不明白这是为什么?原理想不明白。请高手点化。
#include <string>
using namespace std;class A
{
public:
static const int i;
A();
private:
};
const A::i=12;//类变量要在类外边初始化
A::A()
{
};
void main()
{
}
const int A::i=21; 而不是:
static const int A::i=21;
const int A::i=21; 而不是:
static const int A::i=21;
因为只有类的static变量才能这样放在类成员函数之外进行初始化,所以static也就不用写了