您沒有Tree::insert
定義的任何地方,但你聲明它。它幾乎不存在,因此您需要添加功能:
//just code to make this example, and be able to compile it
template <class T> class Node
{
private:
std::vector<T> keys;
public:
Node()
{
}
size_t Add(T key)
{
keys.push_back(key);
return keys.size() - 1;
}
};
//tree.h
template <class T>
class Tree {
public:
Tree(void);
void insert (T key);
private:
Node<T>* root;
};
//tree.cpp
template <class T> Tree<T>::Tree (void)
{
//construction code here
//example:
root = new Node<T>;
}
template <class T> void Tree<T>::insert (T key)
{
//insert code here
//example:
root->Add(key);
}
//main.cpp
int main()
{
Tree<int>* d = new Tree<int>();
int key;
std::cin >> key;
d->insert(key);
return 0;
}
如果你想讀的任何數據和字符串之間進行轉換
,整數,雙打等那麼我建議你看看boost::any或boost::lexical_cast,經過一些修改,你可以做這樣的事情:
template <class T> class Node
{
private:
public:
std::vector<T> keys;
Node()
{
}
size_t Add(T key)
{
keys.push_back(key);
return keys.size() - 1;
}
};
template <class T>
class Tree {
public:
Tree(void);
void insert (T key);
T& get(size_t index);
private:
Node<T>* root;
};
template <class T> Tree<T>::Tree (void)
{
//construction code here
//example:
root = new Node<T>();
}
template <class T> void Tree<T>::insert (T key)
{
//insert code here
//example:
root->Add(key);
}
template <class T> T& Tree<T>::get (size_t index)
{
//get code here
//example:
return root->keys[index];
}
#include <boost/lexical_cast.hpp>
int main()
{
Tree<std::string>* d = new Tree<std::string>;
std::string key;
std::cin >> key;
d->insert(key);
std::cout << "Your input:\n";
std::cout << "\tString: " << boost::lexical_cast<std::string>(d->get(0)).c_str() << "\n";
std::cout << "\tFloat: " << boost::lexical_cast<float>(d->get(0)) << "\n";
std::cout << "\tDouble: " << boost::lexical_cast<double>(d->get(0)) << "\n";
std::cout << "\tInt: " << boost::lexical_cast<int>(d->get(0)) << "\n";
return 0;
}
輸出:
你有defin ed'insert'? – 0x499602D2
是的。這只是所有程序的一部分 – siwy
然後,你是否與定義'insert'的模塊鏈接?因爲,錯誤消息指示鏈接程序無法在其正在查找的任何位置找到該定義。 –