" [Classname]没有命名类型"甚至包括.h文件后

时间:2016-10-12 23:08:10

标签: c++ class

我在.cpp文件中的每个函数原型和函数中都得到了这个编译器错误(" CLASSNAME没有命名类型")

.h文件:

#ifndef MOVIETREE_HPP
#define MOVIETREE_HPP

struct MovieNode
{
    ...//members and such
};

class MovieTree
{
    public:
        MovieTree();
        ~MovieTree();
        void printMovieInventory();
        ...//more functions

    protected:
    private:
        void printMovieInventory(MovieNode * node);
        MovieNode* search(std::string title);
        MovieNode *root;

};
#endif // MOVIETREE_HPP

.cpp文件:

#ifndef MOVIETREE_HPP
#define MOVIETREE_HPP

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

#include "MovieTree.hpp"

using namespace std;

MovieTree::MovieTree(); //error code here and all prototypes and functions below
MovieTree::~MovieTree();
void MovieTree::printMovieInventory();
...//more function prototypes

MovieTree::MovieTree(){
}
MovieTree::~MovieTree(){
}

void MovieTree::printMovieInventory(){
    ...//body
}
...//more function bodies

#endif 

我遇到的所有其他论坛和问题都有包含头文件的简单解决方案。我已经将其包含在我的代码中了。

我已经三次检查,而且很漂亮,我把一切拼写正确。我做错了什么?

1 个答案:

答案 0 :(得分:4)

问题是.cpp文件中的这些行:

#ifndef MOVIETREE_HPP
#define MOVIETREE_HPP
...
#endif

这些行只应放在头文件中,而不是程序文件中 - 标题会使用它们来检测它是否包含两次,因此它不会尝试重新定义所有内容。通过在#include <movietree.hpp>行之前自己设置它,你会误以为它已被包含在内,所以它什么也没做。