对象没有命名类型?

时间:2015-01-29 18:38:24

标签: c++ object c++11

我有一大堆代码,无论我多么精简,都会让我失败。有问题的代码是:

#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 ++类和成员函数的Tutorialspoint教程。

我在Windows 7(64位)计算机上使用了Code :: Blocks 13.12附带的MinGw,编译器标记为-std=c++11

1 个答案:

答案 0 :(得分:6)

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

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

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

将其置于可以使用其身份的位置works

关于您对前向引用的猜测,它们完全unnecessary代码可以使用 - 实际上您甚至根本不需要命名类Tile

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