我已經聲明瞭一個輔助函數給我在頭文件中聲明的類的方法,並且由於某種原因,當我編譯源代碼文件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
向我們展示「k-d.h」。 – cnicutar
您需要發佈足夠的代碼示例來演示該問題。嘗試將它隔離到發生錯誤時的絕對最小情況--10箇中有9個,這將爲您解決問題,如果沒有,您可以發佈它,並且有人應該很快發現錯誤。 – Ayjay
請提供一個我們可以用來重現錯誤的例子,如[這裏](http://sscce.org)所述。 –