【问题标题】:Object does not name a type?对象没有命名类型?
【发布时间】:2015-01-29 18:38:24
【问题描述】:

我有一大段代码,无论我如何精简它,都会一直失败。有问题的代码是:

#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 和课程教程中研究了几个小时后,我发现上面的 sn-p 应该可以运行。

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

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

【问题讨论】:

    标签: c++ object c++11


    【解决方案1】:

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

    #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(); }
    

    【讨论】:

    • facepalm 我早该预见到它的到来,事后看来这是显而易见的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2022-01-21
    • 2023-04-07
    • 2021-02-03
    • 2017-04-01
    相关资源
    最近更新 更多