对象不命名类型

Object does not name a type?

本文关键字:类型 对象      更新时间:2023-10-16

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

#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++编程相对较新,但是几个小时的Stackexchange和类教程的挖掘告诉我,上面的代码片段应该运行。

这里已经使用前向声明解决了许多其他此类问题,但在这种情况下,它试图将对象"Wall"作为一个类来读取。由于该类以前要大得多,因此我对其进行了相当大的修剪,但它仍然无法正常工作。我基于C++类和成员函数的教程点教程。

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

您正在尝试在任何函数外部执行语句(显式的函数调用)。这行不通。

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

把它放在允许语句的地方,它可以工作。

至于你对前向引用的猜测,它们对于你的代码来说是完全没有必要的——事实上,你甚至根本不需要命名类Tile

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