C ++头文件错误:基类未定义

时间:2017-11-11 09:46:35

标签: c++ visual-studio visual-studio-2010 visual-c++

我目前在开始项目中包含头文件时感到非常沮丧。到目前为止,我有一个链接到我的基本文件的头文件,我一直得到相同的错误,编译无法读取我的基类。

我认为读取头文件存在问题。我该怎么办?

//立即更新它显示构建

的编译错误

主要cpp文件

#include <string>
#include "animal.h"
using namespace std;
enum COLOR { Green, Blue, White, Black, Brown };

int main() {

cout << "Starting" << endl;
int value = 0; Mammal *zoo[3];
int i = 0;

cout << "Program exiting …. " << endl;
return 0;
}

标头文件

#include <iostream>
#include <string>
#ifndef HEADER_H
#define HEADER_H

using namespace std;
enum COLOR { Green, Blue, White, Black, Brown };

class Animal {
public:
Animal() {
    cout << "constructing Animal object " << _name << endl;
}
~Animal() {
    cout << "destructing Animal object " << _name << endl;
}

Animal(std::string n, COLOR c) {
    _name = n; _color = c;
    cout << "constructing " << _name << " Color " <<
        endl;
}

virtual void speak() const { cout << "Animal speaks " << endl; }
//void speak() const { cout << "Animal speaks " << endl; }
virtual void move() = 0;

void setName(std::string n) { _name = n; }
void setCOLOR(COLOR c) { _color = c; }

private:
std::string _name; COLOR _color;
};

class Mammal : public Animal {
public:
Mammal() {}
Mammal(std::string n, COLOR c) {
    setName(n);
    setCOLOR(c);
    cout << "constructing Mammal object " <<  endl;
}
~Mammal() { cout << "destructing Mammal object " << endl; }
};

#endif

1 个答案:

答案 0 :(得分:0)

使用pragma once并将警卫放在一起是多余的。删除任何一个。

如果您在标头中使用string,请不要忘记它需要std::前缀。

COLOR必须移到头文件中。

// #pragma once
#ifndef HEADER_H
#define HEADER_H

using namespace std;
enum COLOR { Green, Blue, White, Black, Brown };

您还需要定义setName

总结:

在C和C ++中,必须先声明或定义每个类型或函数,然后再使用,反之亦然。