代码块:' Class'在这方面没有申明

时间:2015-11-06 21:34:22

标签: c++ codeblocks mingw32

所以我想编译一个非常简单的项目。由于某些原因,它在.cpp文件中找不到我的类。

这是代码: main.cpp中:

#include <iostream>
#include "Dog.h"

using namespace std;


int main()
{
    Dog myDog;
    return 0;
}

Dog.h:

#ifndef DOG_H
#define DOG_H


class Dog
{
    public:
        Dog();
        virtual ~Dog();
        Dog(const Dog& other);
        Dog& operator=(const Dog& other);
    protected:
    private:
};

#endif // DOG_H

Dog.cpp:

#include "Dog.h"

Dog::Dog()
{
    //std::cout << "I'm alive!";
}

Dog::~Dog()
{
    //dtor
}

Dog::Dog(const Dog& other)
{
    //copy ctor
}

Dog& Dog::operator=(const Dog& rhs)
{
    if (this == &rhs) return *this; // handle self assignment
    //assignment operator
    return *this;
}

这非常基本,我仍然得到错误:&#39; Dog&#39;未在此范围内宣布。

我相信我需要将它添加到构建中,但我已经通过右键单击项目窗口中的dog.cpp并构建设置来实现这一点。

build settings of Dog.cpp

编译日志:

-------------- Build: Debug in MyProject (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -fexceptions -g -Iinclude -c C:\Users\tamas\Documents\MyProject\include\Dog.cpp -o obj\Debug\include\Dog.o
mingw32-g++.exe -Wall -fexceptions -g -Iinclude -c C:\Users\tamas\Documents\MyProject\main.cpp -o obj\Debug\main.o
C:\Users\tamas\Documents\MyProject\main.cpp: In function 'int main()':
C:\Users\tamas\Documents\MyProject\main.cpp:9:5: error: 'Dog' was not declared in this scope
     Dog myDog;
     ^
C:\Users\tamas\Documents\MyProject\main.cpp:9:9: error: expected ';' before 'myDog'
     Dog myDog;
         ^

2 个答案:

答案 0 :(得分:0)

您在问题中发布的代码没有任何问题。

一些评论:

  • #include <iostream>添加到Dog.cpp,以便您可以取消注释cout构造函数中的Dog()调用
  • 您可以通过从main.cpp注释#include "Dog.h"来导致错误
    • 这可以防止编译器知道&#34; Dog&#34;是
  • 导致错误的另一种方法是,如果正在定义DOG_H,则:
    • 手动作为编译器选项。 (确保 未定义
    • 手动通过额外的#define
    • 自动通过其他标题。确保您没有意外地将DOG_H复制到另一个头文件中。 (如果您的编译器支持使用非标准#pragma once,则可以使用它而不是包含保护)

答案 1 :(得分:0)

问题是正确的Dog.h文件应该在其他地方(在include /目录中)。