代码块:'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/ 目录中)。
所以我正在尝试编译一个非常简单的项目。由于某些原因,它在 .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()
构造函数 中的 - 您可以通过从 main.cpp 中注释掉
#include "Dog.h"
来导致错误- 这会阻止编译器知道 "Dog" 是什么
- 另一种导致错误的方法是如果定义了
DOG_H
,则:- 手动作为编译器选项。 (确保不是被定义)
- 通过额外的
#define
手动
- 自动通过其他 header。确保您没有意外地将
DOG_H
复制到另一个 header 文件中。 (如果你的编译器支持使用非标准#pragma once
你可以使用它来代替 include guards)
cout
调用
问题是正确的 Dog.h 文件在其他地方(在 include/ 目录中)。