首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++结构和“错误: ISO C++禁止无类型的‘.’声明”

C++结构和“错误: ISO C++禁止无类型的‘.’声明”
EN

Stack Overflow用户
提问于 2014-03-28 04:25:30
回答 4查看 9.8K关注 0票数 1

我试图用C++编写类和结构,例如:

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
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++禁止不带任何类型的.“的声明(如)的其他帖子的答案建议添加命名空间,但我发现很难理解为什么它在这里不起作用。

总括而言,我有以下问题:

  1. 在这种情况下,这个错误实际上意味着什么?
  2. 一般来说,这个错误意味着什么?
  3. 为什么这个代码不能工作?
  4. 怎么让它起作用?

如果有人能给我一个答案和/或一个研究/阅读方向,我将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-28 04:32:21

这段代码

代码语言:javascript
运行
复制
pos.x = 0;
pos.y = 0;

需要参加一个活动。一种方法是将其放入构造函数中,如下所示:

代码语言:javascript
运行
复制
class Maze {
    Position pos;
public:
    Maze() {
        pos.x = 0;
        pos.y = 0;
    }
};

注意,我公开了构造函数,否则您将无法使用Maze类

编辑:实际上回答了你的问题:

在这种情况下,这个错误实际上意味着什么?编译器不知道如何处理pos.x = 0,因为它期望的是此时的声明,而不是代码。

一般来说,这个错误意味着什么?这通常意味着编译器不知道如何处理您编写的声明。

为什么这个代码不能工作?因为你把可执行代码放在声明应该去的地方。

怎么让它起作用?请看上面的代码。

票数 5
EN

Stack Overflow用户

发布于 2015-11-09 06:52:23

由于这个问题的标题是"ISO C++禁止声明“--比如”没有类型的“,这里有一个更通用的答案。C++无法找到类型,所以只需指定类型即可。

在我的例子中,只有在添加了一个前向声明之后,我才能解决它。

A.hpp

代码语言:javascript
运行
复制
class A
{
};

B.hpp

代码语言:javascript
运行
复制
#include "A.hpp"
class B
{
public:
  A* inst;
};

这导致了国际标准化组织C++的错误,禁止无类型的A的声明。

因此,我对B.hpp做了如下修改:

代码语言:javascript
运行
复制
#include "A.hpp"
class A;//the forward declaration
class B
{
public:
  A* inst;
};

而且它编译得很好!

票数 3
EN

Stack Overflow用户

发布于 2014-03-28 04:33:09

首先,不能在类的顶层初始化成员:

代码语言:javascript
运行
复制
class Maze {
    Position pos;
    pos.x = 0;
    pos.y = 0;
};

您必须提供某种类型的构造函数,并且,如果您希望该职位的状态为默认状态,则可能需要在那里完成初始化。对象通常应该负责它们自己的初始化和拆卸:

代码语言:javascript
运行
复制
using namespace std;

struct Position {
    int x;
    int y;
    Position() : x(0), y(0) {}
};

class Maze {
    Position pos;
};

int main () {
    return 0;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22704170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档