2016-04-09 22 views
-1

我想用Visual Studio 2015創建一個DLL。我爲此創建了一個項目。我開始添加類,現在我有超過一千個編譯錯誤。看起來我與低級C類型和C++本身有衝突?第一次嘗試創建一個DLL的類有很多,捆綁在一個

下面是代碼:https://github.com/Lorac/GrimDawnCharacterTrainer

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

我使用預編譯頭,我應該?我可以用一些方法來解決這個問題。

回答

1

您的包含指令是不正確的。

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.h CharacterBio.cpp#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 *); 
}; 

這同樣適用於你的代碼的其餘部分 - 很少有頭文件包括什麼所有!

+0

哦,我明白了,太棒了!如果我看一下GDCFile.h,我是否必須轉發聲明所有的類? –

+0

在這種情況下,前向聲明將不會執行,因爲像Header這樣的類是按值使用的(作爲GCDFile類的成員)。當你使用指針或引用(並且不解引用它們)時,前向聲明是正確的。 –

+0

什麼是最好的選擇,將它們改爲指針?或保持原樣? –