c – 解析“只能在类中初始化静态const积分数据成员”编译错误

前端之家收集整理的这篇文章主要介绍了c – 解析“只能在类中初始化静态const积分数据成员”编译错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下用于创建全局对象导致编译错误.
  1. #include "stdafx.h"
  2. #include <iostream>
  3.  
  4. using namespace System;
  5. using namespace std;
  6. #pragma hdrstop
  7.  
  8. class Tester;
  9.  
  10.  
  11. void input();
  12.  
  13. class Tester
  14. {
  15. static int number = 5;
  16.  
  17. public:
  18.  
  19. Tester(){};
  20. ~Tester(){};
  21.  
  22. void setNumber(int newNumber)
  23. {
  24. number = newNumber;
  25. }
  26.  
  27. int getNumber()
  28. {
  29. return number;
  30. }
  31. }
  32.  
  33. Tester testerObject;
  34.  
  35. void main(void)
  36. {
  37. cout << "Welcome!" << endl;
  38.  
  39. while(1)
  40. {
  41. input();
  42. }
  43. }
  44.  
  45. void input()
  46. {
  47. int newNumber = 0;
  48.  
  49. cout << "The current number is " << testerObject.getNumber();
  50. cout << "Change number to: ";
  51.  
  52. cin >> newNumber;
  53.  
  54. cout << endl;
  55.  
  56. testerObject.setNumber(newNumber);
  57.  
  58. cout << "The number has been changed to " << testerObject.getNumber() << endl;
  59. }

以下是编译错误

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

>如何创建全局类
像我试过的那样对象正确
这里.
>我如何解决“只有静态问题”
const积分数据成员即可
在一个类中初始化“
>基本上我该如何解决剩下的问题
错误,所以我可以得到这个
编译?

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

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

解决方法

只需逐个解决错误.很多错误只是从最初的错误中级联出来,所以当只有一对错误时,看起来有很多问题.从顶部开始:
  1. 1>.\test.cpp(15) : error C2864: 'Tester::number' : only static const integral data members can be initialized within a class

除非它是static,const和其中一个整数类型,否则不能在类定义中初始化成员.从数字声明中删除“= 5”.那么你需要在类定义之外定义Tester :: number,如下所示:

  1. int Tester::number = 5;

问题#2:

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

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

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

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

猜你在找的C&C++相关文章