当前位置:  开发笔记 > 编程语言 > 正文

解决"只能在类中初始化静态const积分数据成员"编译错误

如何解决《解决"只能在类中初始化静态const积分数据成员"编译错误》经验,为你挑选了1个好方法。

以下用于创建全局对象导致编译错误.

#include "stdafx.h" 
#include  

using namespace System; 
using namespace std;    
#pragma hdrstop 

class Tester;


void input();

class Tester
{
    static int number = 5;

public:

    Tester(){};
    ~Tester(){};

    void setNumber(int newNumber)
    {
        number = newNumber;
    }

    int getNumber()
    {
        return number;
    }
}

Tester testerObject;

void main(void)
{
    cout << "Welcome!" << endl;

        while(1)
        {
            input();
        }
}

void input()
{
    int newNumber = 0;

    cout << "The current number is " << testerObject.getNumber();
    cout << "Change number to: ";

        cin >> newNumber;

    cout << endl;

    testerObject.setNumber(newNumber);

    cout << "The number has been changed to " << testerObject.getNumber() << endl;
}

以下是编译错误:

1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>Compiling...
1>test.cpp
1>.\test.cpp(15) : error C2864: 'Tester::number' : only static const integral data members can be initialized within a class
1>.\test.cpp(33) : error C2146: syntax error : missing ';' before identifier 'testerObject'
1>.\test.cpp(33) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>.\test.cpp(49) : error C2039: 'getNumber' : is not a member of 'System::Int32'
1>        c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::Int32'
1>.\test.cpp(55) : error C2039: 'setNumber' : is not a member of 'System::Int32'
1>        c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::Int32'
1>.\test.cpp(57) : error C2039: 'getNumber' : is not a member of 'System::Int32'
1>        c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::Int32'
1>Build log was saved at "file://c:\Users\Owner\Documents\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm"
1>test - 6 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    如何像我在这里尝试的那样正确创建全局类对象.

    我如何解决"只能在类中初始化静态const积分数据成员"

    基本上我如何修复其余的错误,以便我可以编译?

我喜欢在文件范围内声明全局类对象(我喜欢在文件范围内声明所有全局变量),因为当我必须创建单独的源文件并执行"extern"时,它变得非常复杂并且永远不适合我.虽然,我确实想知道如何最终做到这一点......似乎我看到的每个教程都不会编译,除非它编译,我不知道如何重新创建它!

如果我可以让它编译...然后我可以成功地学习如何做到这一点.因此,如果有人可以将上面的内容重写到它可以复制并粘贴到Visual C++ Express 2008中,那么我最终将能够找到如何重新创建它.看到修复此问题,我感到非常兴奋!只是我无法使Global Objects正常工作!有关声明Global Class Objects的任何其他信息......或者其他任何相关信息都是受欢迎的!



1> Michael Burr..:

只需逐个解决错误.很多错误只是从最初的错误中级联出来,所以当只有一对错误时,看起来有很多问题.从顶部开始:

1>.\test.cpp(15) : error C2864: 'Tester::number' : only static const integral data members can be initialized within a class

除非它是static,const和其中一个整数类型,否则不能在类定义中初始化成员.保留" = 5"的声明number.然后你需要定义Tester::number类定义之外的内容,如下所示:

int Tester::number = 5;

问题#2:

1>.\test.cpp(33) : error C2146: syntax error : missing ';' before identifier 'testerObject'

几乎完全是它所说的(缺少分号错误在说分号应该在哪里可能有点不精确) - 在定义Tester类之后你需要一个分号.

解决这些问题,你的编译问题就会消失.

关键是尝试从顶部一次一个地编译错误.如果你得到超过3个,你可能只是在第3个左右之后忽略所有内容,因为初始错误只会导致编译进入杂草(如果它们是真正的错误,它们将在下一个再次出现无论如何编译).

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有