下面的定义是失败的......我认为它与在另一个类模板(Graph)中专门化类模板(Vector)有关。谢谢!
this is the part giving me trouble (defined in Graph below) ->
std::map<KeyType, Vertex<KeyType, ObjectType> > vertexes;
template <class KeyType, class ObjectType>
class Vertex
{
private:
KeyType key;
const ObjectType* object;
public:
Vertex(const KeyType& key, const ObjectType& object);
const KeyType getKey();
};
template <class KeyType, class ObjectType>
class Graph
{
private:
std::map<KeyType, Vertex<KeyType, ObjectType> > vertexes;
public:
const Vertex<KeyType, ObjectType>& createVertex(const KeyType& key, const ObjectType& object);
};
template <class KeyType, class ObjectType>
const Vertex<KeyType, ObjectType>& Graph<KeyType, ObjectType>::createVertex(const KeyType& key, const ObjectType& object)
{
Vertex<KeyType, ObjectType> *vertex = new Vertex<KeyType, ObjectType>(key, object);
vertexes.insert(pair<KeyType, Vertex<KeyType, ObjectType> >(vertex.getKey(), vertex));
return *vertex;
};
Visual Studio 10报告:
错误1错误C2228:'。getKey'的左边必须有class / struct / union c:\ documents \ visual studio 2010 \ projects \ socialnetwork \ socialnetwork \ graph.h 46 1 SocialNetwork
错误中提到的行对应于末尾附近的vertexes.insert调用。
更新:根据更改&gt;&gt;的2张海报建议进行更正。到&gt;取代。没有不同。错误仍然存在。
答案 0 :(得分:2)
你的vertex
是一个指针。要访问getKey
,您需要使用->
运算符,而不是.
。另外,您可以使用std::make_pair
来避免重复这些类型。
vertexes.insert(std::make_pair(vertex->getKey(), *vertex));
答案 1 :(得分:1)
没有错误信息本身,我不能那么有帮助。但如果我冒险猜测:
除非您使用的是C ++ 0x,否则
std::map<KeyType, Vector<KeyType, ObjectType>> vertexes;
将无法解析,因为最后的>>
被解析为运算符,而不是嵌套模板参数列表的结尾。因此,您需要将其更改为
std::map<KeyType, Vector<KeyType, ObjectType> > vertexes;
但这确实在C ++ 0x中修复了。
答案 2 :(得分:0)
首先从Vector更改为Vertex(错字?)。第二个错误是“&lt;&lt;”,如果你把它们放在一起,它将是移位运算符。以下是该行应该如何:
std::map<KeyType, Vertex<KeyType, ObjectType> > vertexes;
修改:根据新信息,我可以发现另一个错误:
在createVertex方法中,您将创建一个新的Vertex,但将其用作Value。例如,在这一行:
vertexes.insert(std::pair<KeyType, Vertex<KeyType, ObjectType> >(vertex.getKey(), vertex));
电话:
vertex.getKey()
Vertex是一个指针,所以你应该改为vertex-&gt; getKey()。 有更多的错误,但都与顶点是一个被视为值的指针有关。