以下创建全局对象会导致编译错误。
#include "stdafx.h"
#include <iostream>
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 中并运行的位置,那么我最终将能够弄清楚如何重新创建它。我非常高兴看到这个问题的修复!只是我无法让全局对象正常工作!欢迎任何有关声明全局类对象的其他信息...或任何与此相关的信息!
开始一一解决错误。许多错误只是从最初的错误级联而来,因此看起来只有几个错误却存在很多问题。只需从顶部开始:
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
class.
解决这些问题,你的编译问题就会消失。
关键是尝试从顶部一次处理一个编译器错误。如果你得到的错误超过 3 个,你可能可以忽略第 3 个之后的所有错误,因为最初的错误只会导致编译陷入困境(如果它们是真正的错误,它们将在下一个错误中再次出现)无论如何编译)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)