代码块:'Class' 未在此范围内声明

Codeblocks: 'Class' was not declared in this scope

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

代码如下: 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;
}

所以这很基本,但我仍然收到错误:'Dog' 未在此范围内声明。

我认为我需要将它添加到构建中,但我已经通过右键单击项目 window 中的 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;
         ^

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

几点评论:

  • #include <iostream>添加到Dog.cpp,这样您就可以取消注释Dog()构造函数
  • 中的cout调用
  • 您可以通过从 main.cpp 中注释掉 #include "Dog.h" 来导致错误
    • 这会阻止编译器知道 "Dog" 是什么
  • 另一种导致错误的方法是如果定义了 DOG_H,则:
    • 手动作为编译器选项。 (确保不是被定义)
    • 通过额外的 #define
    • 手动
    • 自动通过其他 header。确保您没有意外地将 DOG_H 复制到另一个 header 文件中。 (如果你的编译器支持使用非标准 #pragma once 你可以使用它来代替 include guards)

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