2011-12-11 114 views
-1

在最後的幾個小時,我拼命想弄清楚什麼是錯的,但在白白:C++包括不起作用

我有以下情形:我有一個工作的頭,我決定將零件從其移動到另一個新文件。

所以基本上我現在有:

FILEA

...... 
class A; 
..... 

文件B

#include FileA 
..... 
A B; 
..... 

但變量A沒有得到FILEB的一致認可。

  • 所有的定義是相同的命名空間
  • 我使用Boost庫和調試模式
  • 沒有拼寫錯誤,我得到下:「intelisence:不兼容的編譯選項」(不知道若真這個連接或不是我的問題)
  • 當在代碼上看,視覺工作室認識到所有類型(即當按下文件B中的類型「A」,視覺工作室認出它)。

我在做什麼錯?

按照您的要求爲真正的代碼和進一步的細節: 讓我更具體 我使用的IFNDEF方法,或許這造成了混亂,但我不明白爲什麼,因爲FILEB是唯一一個誰包括的fileA

本身看起來像這樣的代碼:

#ifndef MERKLE_BASICS_HPP 
    #define MERKLE_BASICS_HPP 
    #include "FullProofConsumer.hpp" 
    #include <openssl\sha.h> 
    namespace PCP_Project{ 
typedef unsigned char* HashDigest; 
//Forward Declarations 
HashDigest hashTwoElements(HashDigest,HashDigest); 
HashDigest hash_GF2E_Element (GF2E); 
HashDigest createZeroCommitment(); 
//The definition of the hashDigest type, for now its just long. Will be probably  replacedlater. 
//typedef unsigned char* HashDigest; 

    } 
    #endif 

,然後在其他文件我有:

   #ifndef MERKLE_CONSUMER 
       #define MERKLE_CONSUMER 
       #include <fstream> 
       #include "MerkleBasics.hpp" 
       namespace PCP_Project{ 
       ...... 

       HashDigest Value; 
        ... 

並編譯錯誤: 錯誤273錯誤C2146:語法錯誤:缺少';'前標識「值」
(我有很多這樣的,這只是一個例子) 很抱歉,如果從原來的問題,你瞭解的東西不同模式,並再次感謝

+4

請編輯您的問題以包含您的*實際*代碼。 –

+2

請顯示實際的代碼和實際的編譯器消息。 –

+2

這個新代碼對我來說工作正常 - 經過編輯當然。發佈**最低可編譯代碼**請提出問題。 –

回答

1

它看起來像在文件中的,你只有一個類的向前聲明:

class A; 

這意味着你不具備類的完整定義,因而無法使用它的實例 - 但是你可以使用指針。

您必須發佈更多代碼才能獲得更多幫助(格式正確)。

+2

+1對於10k! :-) – Mysticial

+2

打開香檳瓶:)))) –

1

看着你的問題的描述我採取一個隨機猜測 - 你有沒有意外地把相同的包括保護在這兩個文件?在這種情況下,包含A將根本不起作用。

+0

猜測在這裏毫無意義;我們應該等待OP包含他/她的實際代碼。 –

+0

解決問題。我剛剛發現一個包含4-5個文件長度的循環鏈。謝謝大家的幫助 – Bartolinio