我试图用C++编写类和结构,例如:
using namespace std;
struct Position {
int x;
int y;
};
class Maze {
Position pos;
pos.x = 0;
pos.y = 0;
};
int main() {
return 0;
}
但是,当我试图编译它时,它会产生一些错误:
(gcc版4.3.2)
10: error: ISO C++ forbids declaration of 'pos' with no type
10: error: expected ';' before '.' token
11: error: ISO C++ forbids declaration of 'pos' with no type
11: error: expected ';' before '.' token
看起来,这段代码与C++教程: Struct中的代码基本相同。
关于"error: ISO C++禁止不带任何类型的.“的声明(如这)的其他帖子的答案建议添加命名空间,但我发现很难理解为什么它在这里不起作用。
总括而言,我有以下问题:
如果有人能给我一个答案和/或一个研究/阅读方向,我将不胜感激。
发布于 2014-03-28 04:32:21
这段代码
pos.x = 0;
pos.y = 0;
需要参加一个活动。一种方法是将其放入构造函数中,如下所示:
class Maze {
Position pos;
public:
Maze() {
pos.x = 0;
pos.y = 0;
}
};
注意,我公开了构造函数,否则您将无法使用Maze类
编辑:实际上回答了你的问题:
在这种情况下,这个错误实际上意味着什么?编译器不知道如何处理pos.x = 0
,因为它期望的是此时的声明,而不是代码。
一般来说,这个错误意味着什么?这通常意味着编译器不知道如何处理您编写的声明。
为什么这个代码不能工作?因为你把可执行代码放在声明应该去的地方。
怎么让它起作用?请看上面的代码。
发布于 2015-11-09 06:52:23
由于这个问题的标题是"ISO C++禁止声明“--比如”没有类型的“,这里有一个更通用的答案。C++无法找到类型,所以只需指定类型即可。
在我的例子中,只有在添加了一个前向声明之后,我才能解决它。
A.hpp
class A
{
};
B.hpp
#include "A.hpp"
class B
{
public:
A* inst;
};
这导致了国际标准化组织C++的错误,禁止无类型的A的声明。
因此,我对B.hpp
做了如下修改:
#include "A.hpp"
class A;//the forward declaration
class B
{
public:
A* inst;
};
而且它编译得很好!
发布于 2014-03-28 04:33:09
首先,不能在类的顶层初始化成员:
class Maze {
Position pos;
pos.x = 0;
pos.y = 0;
};
您必须提供某种类型的构造函数,并且,如果您希望该职位的状态为默认状态,则可能需要在那里完成初始化。对象通常应该负责它们自己的初始化和拆卸:
using namespace std;
struct Position {
int x;
int y;
Position() : x(0), y(0) {}
};
class Maze {
Position pos;
};
int main () {
return 0;
}
https://stackoverflow.com/questions/22704170
复制相似问题