我有一個類正處於代表字典的初始階段,並且有一些編譯問題。除了包含main的文件以外,這些是項目中唯一的文件。 Main不包含對Dictionary的引用。C++函數不是具有shared_ptr的類的成員,或者爲什麼我的變量未聲明?
Dictionary.h
#include <vector>
typedef shared_ptr<Node> node_ptr;
struct Node;
class Dictionary
{
public:
Dictionary(void);
~Dictionary(void);
Dictionary(char* filename);
private:
node_ptr root;
shared_ptr<Node> curNode; // 3
void buildTree(char* filename);
shared_ptr<Node> findChild(shared_ptr<Node> node, char val); // 1
node_ptr findChild(node_ptr node, char val); // 2 (not repeated in actual header)
};
Dictionary.cpp
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <memory>
#include "Dictionary.h"
using namespace std;
struct Node
{
Node::Node(char val)
{
value = val;
};
vector<node_ptr> children;
char value;
};
Dictionary::Dictionary(char* filename)
{
root = make_shared<Node>(0);
curNode = root;
buildTree(filename);
}
Dictionary::Dictionary(){}
Dictionary::~Dictionary(void){}
shared_ptr<Node> Dictionary::findChild(shared_ptr<Node> node, char val) // 1
node_ptr Dictionary::findChild(node_ptr node, char val) // 2
{
for(int i = 0; i < node->children.size(); i++)
{
if(node->children[i]->value == val)
return node->children[i];
}
return 0;
}
void Dictionary::buildTree(char* filename)
{
ifstream input;
node_ptr temp;
input.open(filename);
char* line = (char*)malloc(45);
for(int i = 0; i < 26; i++) //build the first 26 nodes
root->children.push_back(make_shared<Node>('a' + i));
while(!input.eof())
{
input >> line;
int lind = 1;
char curChar = line[0];
curNode = findChild(root, curChar); //assume we got this one
while(1)
{
curChar = line[lind];
if(curChar == 0)
break;
temp = findChild(curNode, line[lind]);
if(temp == 0)
{
temp = make_shared<Node>(line[lind]);
curNode->children.push_back(temp);
curNode = temp;
}
else
curNode = temp;
lind++;
}
}
free(line);
}
當我編譯這個我得到這些錯誤。 在粗體線1時的情況下,使用:「「findChild:不是成員‘詞典’‘ 在這種情況下粗體線2當使用:’語法錯誤:‘)’」
論的頂這我得到的錯誤聲明,我的變量沒有聲明如CurNode在Dictionary的構造函數。
這個問題似乎是以某種方式使用shared_ptr。
已刪除。之前沒有發佈,並且由粗體按鈕添加。 – danielm2100
你不需要在dictionary.h中使用'std :: shared_ptr'而不是'shared_ptr'嗎? – Roddy
就是這樣。謝謝!我知道這將是明顯的。我如何將此標記爲答案? – danielm2100