如何初始化类的私有成员在C++中

问题描述:

嗨,我有一些私有成员C++类如下如何初始化类的私有成员在C++中

template <typename V, typename E> 
    class Vertex 
    { 
    public: 
     Vertex(); 
     ~Vertex(); 
     typedef std::pair<int, E> edgVertPair; 
     typedef std::vector<edgeVertPair> vectEdges; 
     void setVertexID(int data); 
     int getVertexID(); 
     void setEdgeVertPair(int vertID, E edge); 
     edgVertPair getEdgeVertPair();  
     void setEdgeList(edgeVertPair edgeVert); 
     vectEdges getEdgeList(); 
    private: 
     int vertexID; 
     edgVertPair evp; 
     vectEdges edgeList; 
    }; 

现在我想建立一个对即像

evp.first="someint"; evp.second="somestring";

然后将此evp推入edgeList即edgeList.push_back(evp); 现在的问题是在setter函数,我没有这样的事情:

template<typename V, typename E> 
    void Vertex<V, E>::setEdgeVertPair(int vertID, E edge){ 
      ...populate evp;... 
    } 

现在我不知道如何填充EVP对与vertID,边缘。

+0

忽略你将值存储在'evp'中并将它们添加到向量中的原因,不会'evp = make_pair(vertID,edge); edgeList.push_back(evp);'工作? – Zabba 2012-03-17 22:17:55

+0

与视觉工作室无关。未标记。 – 2012-03-17 22:38:22

+1

您有15个问题,而且没有人回答过? – 2012-03-17 22:41:21

感谢所有谁回答我的问题,我想通了一些搜索后。一种方法是我删除了typedef,并在我的私人数据部分,直接声明变量为

std::pair<int, E> evp; 
std::vector<std::pair<int, E>> edgeList; 

并且工作正常。

另一种方式是我必须在typedef之前预先输入关键字'typename'并且它工作正常。

+0

-1:删除类型定义可能有助于智能感知,但您不应该编写代码来解决其限制。当你编写代码时,它可以帮助你,而不是教你如何编写代码。 – Troubadour 2012-03-21 22:12:11

使用std::make_pair来填充evp对。

http://www.cplusplus.com/reference/std/utility/make_pair/

+0

感谢您的链接,但我面临一个不同的问题,因为我有一个templatised类,不知道是否简单地使用evp.first或evp.second将填充对,因为intellisense说“没有成员......”如此我很困惑。 – Naphstor 2012-03-18 03:31:10