试图让c++类看到彼此

Trying to get C++ classes to see each other

本文关键字:c++      更新时间:2023-10-16

我有两个类类型和每个类型的一个对象。其中一个类类型是Player我在Player。h中创建了一个名为Charles的类型为Player的类。另一个类是Karatoise类型的Karatoise, Karatoise是在Karatoise.h中创建的。我需要能够看到一些整数存储在Karatoise1和查尔斯,两者都有所有的变量内部公开,两者karatoise。cpp包括播放器。h和播放器。cpp包括karatoise。h。两个头文件也有一个头保护,我认为它被称为头文件的内部被#ifndef, #define和#endif语句包围。然而,使用这个设置visual studio告诉我,这两个Charles都有多次出现。obj和Karatoise1.obj。如果我移动类的创建,使Charles和karatoise在main中定义,Karatoise.cpp和Player.cpp将不接受它们的存在。你能告诉我如何设置文件,以便karatois1和Charles能够看到对方吗?

不要在头文件中创建对象或定义全局变量。使用extern声明变量,并在cpp文件中定义。

您需要定义类并在头文件中声明任何全局变量,以便任何源文件都可以访问它们:

// Player.h
// Define a Player class
class Player {
    // blah blah
};
// Declare a Player object
extern Player Charles;
然后您需要在一个源文件中定义对象,这样它就只有一个定义。这就是所谓的"一个定义规则":
// Player.cpp
#include "Player.h"
// Define the Player object declared in the header
Player Charles;

正如你所发现的,所有的东西都在一个源文件中,你不能从其他源文件访问它;对于头文件中的所有内容,对象由包含头文件的每个源文件相乘定义。

您的下一个问题将是每个标头试图包含另一个,这是不可能的。这里有三种可能的情况:

    如果类定义不需要提及其他类,并且只需要在源文件中使用,那么一切都很好。只需要包含源文件中的其他类头文件即可。
  • 如果类定义需要包含另一个类型的对象,那么你真的需要从这个头文件中包含另一个头文件。当然,不可能两个类都包含另一个类,所以你不需要两个头文件都包含对方。
  • 如果类定义需要提到另一个类(因为它有一个成员是指向它的引用或指针,或者有一个成员函数接受一个作为参数或返回类型),那么你需要声明另一个类:

下面是第三种情况

的例子
// Player.h
class Karatoise;  // Just a declaration, not the full class definition
class Player {
    Karatoise & k_ref;        // OK
    Karatoise * k_ptr;        // OK
    Karatoise do_something(); // OK
    do_something(Karatoise);  // OK
    Karatoise k_obj; // Not OK: needs full class definition
};

您的短语中有错误:Karatoise.cpp包括Player.h和Player.cpp包括Karatoise.h

不能使用循环include。如果你在Player.h:

#include Karatoise.h

所以,你不能做反向包含。

看看c++中的友谊,谷歌一下就知道了;-)欢呼。

相关文章:
  • 没有找到相关文章