第一次尝试创建一个包含许多类的DLL,捆绑在一个DLL中

First time trying to create a DLL with a lot of classes, bundled in one

本文关键字:一个 DLL 包含许 创建 第一次      更新时间:2023-10-16

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

这是代码:https://github.com/Lorac/GrimDawnCharacterTrainer

characterbio.h(6): error C3646: 'level': unknown override specifier (compiling source file srcCharacterBio.cpp)
characterbio.h(6): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file srcCharacterBio.cpp)
characterbio.h(7): error C3646: 'experience': unknown override specifier (compiling source file srcCharacterBio.cpp)
characterbio.h(7): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (compiling source file srcCharacterBio.cpp)
characterbio.h(8): error C3646: 'modifierPoints': unknown override specifier (compiling source file srcCharacterBio.cpp)

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

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>

CharacterBio.h中,您使用<cstdint>中的类型,但不将其包含在头文件中。头文件应该包括它使用的所有内容,或者至少有适当类型的前向声明。

即使包含CharacterBio.cpp中的CharacterBio.h,#include <cstdint>也位于#include "CharacterBio.h"之后。


编写CharacterBio.h文件的合适方法是:

#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 *);
};

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