C++ 第一次尝试创建一个包含很多类的DLL,它们捆绑在一个类中

C++ 第一次尝试创建一个包含很多类的DLL,它们捆绑在一个类中,c++,visual-studio,dll,C++,Visual Studio,Dll,我想用Visual Studio 2015创建一个DLL。我为此创建了一个项目。我开始添加类,现在我在编译上有上千个错误。看起来我和低C类型和C++本身有冲突? 代码如下: 我正在使用预编译头,是吗?关于如何解决这个问题,我可以提供一些指导。您的include指令不正确 CharacterBio.h #pragma once class CharacterBio { public: uint32_t level; uint32_t experience; uint32_

我想用Visual Studio 2015创建一个DLL。我为此创建了一个项目。我开始添加类,现在我在编译上有上千个错误。看起来我和低C类型和C++本身有冲突?

代码如下:


我正在使用预编译头,是吗?关于如何解决这个问题,我可以提供一些指导。

您的include指令不正确

CharacterBio.h

#pragma once

class CharacterBio
{
public:
    uint32_t level;
    uint32_t experience;
    uint32_t modifierPoints;
    uint32_t skillPoints;
    uint32_t devotionPoints;
    uint32_t totalDevotion;
    float physique;
    float cunning;
    float spirit;
    float health;
    float energy;

    void read(GDCFile *);
    void write(GDCFile *);
};
CharacterBio.cpp

#include "pch.h"
#include "CharacterBio.h"
#include "GDCFile.h"
#include "block.h"
#include <cstdint>

void CharacterBio::read(GDCFile *gdc)
{
// <snip>


代码的其余部分也是如此——很少有头文件包含任何内容

哦,我明白了,太棒了!如果我查看GDCFile.h,是否也必须向前声明其中的所有类?在这种情况下,向前声明将不起作用,因为像
Header
这样的类由value使用(作为GCDFile类的成员)。当您使用指针或引用(并且不取消引用它们)时,向前声明是可以的。将它们更改为指针的最佳选项是什么?或者保持原样?因为他们是公共成员,所以包含所有相关的标题可能是有意义的,因为您可能希望类的用户希望使用它们。看起来我解决了标题问题。。。但现在,在我生成obj文件后,它输出以下内容:
CharacterSkills.obj:error LNK2019:未解析的外部符号“public:void\uu thiscall Vector::read(类GDCFile*)”(?read@$Vector@VSkill@@@@QAEXPAVGDCFile@@@Z)在函数“public:void\uu thiscall CharacterSkills::read(类GDCFile*)中引用(?read@CharacterSkills@@QAEXPAVGDCFile@@@Z)
我想我找到了
#include "pch.h"
#include "CharacterBio.h"
#include "GDCFile.h"
#include "block.h"
#include <cstdint>

void CharacterBio::read(GDCFile *gdc)
{
// <snip>
#pragma once

#include <cstdint>

class GDCFile;

class CharacterBio
{
public:
    uint32_t level;
    uint32_t experience;
    uint32_t modifierPoints;
    uint32_t skillPoints;
    uint32_t devotionPoints;
    uint32_t totalDevotion;
    float physique;
    float cunning;
    float spirit;
    float health;
    float energy;

    void read(GDCFile *);
    void write(GDCFile *);
};