2011-10-13 100 views
1

我已經聲明瞭一個輔助函數給我在頭文件中聲明的類的方法,並且由於某種原因,當我編譯源代碼文件I得到一個錯誤告訴我,我宣佈一個變量或字段爲void。我不知道如何解釋這一點,因爲我的目標是將該功能宣佈爲無效。void函數導致編譯器錯誤「變量或字段'funcName'聲明爲void」

編譯器誤差如下:

k-d.cpp:10: error: variable or field ‘insert_Helper’ declared void 
k-d.cpp:10: error: ‘node’ was not declared in this scope 
k-d.cpp:10: error: ‘root’ was not declared in this scope 
k-d.cpp:10: error: expected primary-expression before ‘*’ token 
k-d.cpp:10: error: ‘o’ was not declared in this scope 
k-d.cpp:10: error: expected primary-expression before ‘int’ 

線10的在下面的代碼的等效物是線5.

的源代碼如下:

#include <iostream> 
#include "k-d.h" //Defines the node and spot structs 
using namespace std; 

void insert_Helper(node *root, spot *o, int disc) { 
    (...Some code here...) 
} 

void kdTree::insert(spot *o) { //kdTree is a class outlined in k-d.h 
    insert_Helper(root, o, 0); //root is defined in k-d.h 
} 

如果任何人都可以發現任何會導致編譯器不會將其視爲函數的東西,這將不勝感激。謝謝!

P.S.我沒有把它標記爲kdtree文章,因爲我非常肯定解決方案不依賴於代碼的這個方面。

更新:

這裏是kd.h:

#ifndef K_D_H 
#define K_D_H 

// Get a definition for NULL 
#include <iostream> 
#include <string> 
#include "p2.h" 
#include "dlist.h" 

class kdTree { 
    // OVERVIEW: contains a k-d tree of Objects 

public: 

    // Operational methods 

    bool isEmpty(); 
    // EFFECTS: returns true if tree is empy, false otherwise 

    void insert(spot *o); 
    // MODIFIES this 
    // EFFECTS inserts o in the tree 

    Dlist<spot> rangeFind(float xMax, float yMax); 

    spot nearNeighbor(float X, float Y, string category); 

    // Maintenance methods 
    kdTree();         // ctor 
    ~kdTree();         // dtor 

private: 
    // A private type 
    struct node { 
     node *left; 
     node *right; 
     spot *o; 
    }; 

    node *root; // The pointer to the 1st node (NULL if none) 
}; 

#endif 

而且p2.h:

#ifndef P2_H 
#define P2_H 
#include <iostream> 
#include <string> 
using namespace std; 

enum { 
    xCoor = 0, 
    yCoor = 1 
}; 

struct spot { 
    float key[2]; 
    string name, category; 
}; 

#endif 
+3

向我們展示「k-d.h」。 – cnicutar

+0

您需要發佈足夠的代碼示例來演示該問題。嘗試將它隔離到發生錯誤時的絕對最小情況--10箇中有9個,這將爲您解決問題,如果沒有,您可以發佈它,並且有人應該很快發現錯誤。 – Ayjay

+0

請提供一個我們可以用來重現錯誤的例子,如[這裏](http://sscce.org)所述。 –

回答

0

首先,您需要限定kdTree::node,因爲它被聲明爲內部結構。其次,你必須讓insert_Helper成爲你班級的成員,因爲node是私人的。

額外提示:從.h文件中刪除using指令,和相當資格的string所有的使用等考慮在很多cpp文件頭。

+0

如果他讓它成爲班級的成員,那麼他就不需要去限制它。 –

+0

我想我會這樣做,而不是公開節點。我試圖將其作爲實施的「隱藏」部分。 – smitty

+0

感謝您對「使用」的建議,我應該擺脫那種習慣。 – smitty

0

node是內kdTree嵌套式,在函數定義,你必須將其命名爲kdTree::node。但是,由於node是私密的,因此您也必須做些什麼。

+0

我正試圖在課堂上保留那個,但我認爲它必須是公衆成員。感謝您的建議,我討厭當我遇到這樣的愚蠢的錯誤: - – smitty

+0

的意思是在那裏把笑臉,但按下輸入鍵,而不是輪班大聲笑 – smitty

+0

@smitty:你不一定要公開,它看起來你的班級可以使用朋友。 –

相關問題