对象没有命名类型?

Object does not name a type?

我有一大块代码,无论我如何精简它,它总是失败。有问题的代码是:

#include <iostream>
class Tile;
class Tile{
    public:
    void PRINTME();
};

void Tile::PRINTME() { std::cout << "Blergh"; }

Tile Wall;
Wall.PRINTME();

它显示以下错误消息:

(...)\MapTiles.h|11|error: 'Wall' does not name a type|

我可能是 C++ 编程的新手,但是在 classes 上研究 Stackexchange 和教程的几个小时告诉我上面的代码片段应该 运行.

此处的多个其他此类问题已使用前向声明解决,但在本例中,它试图将对象 "Wall" 读取为 class。由于 class 之前比较大,我对它进行了相当大的修整,但它仍然无法正常工作。这个例子基于 C++ classes 和成员函数的 Tutorialspoint 教程。

我在 Windows 7(64 位)机器上使用 Code::Blocks 13.12 附带的 MinGw,编译器标志 -std=c++11 已勾选。

您正试图在任何函数之外执行语句(明确的函数调用)。这行不通。

#include <iostream>
class Tile;
class Tile{
    public:
    void PRINTME() { ::std::cout << "I PRINTED MESELF!\n"; }
};

int main()
{
    Tile Wall;
    Wall.PRINTME();
}

把它放在允许声明的地方works

至于你对前向引用的猜测,它们完全 unnecessary 让你的代码工作 - 事实上你甚至根本不需要命名 class Tile:

#include <iostream>
struct { void PRINTME() { std::cout << "I PRINTED MESELF!\n"; } } Wall;
int main() { Wall.PRINTME(); }