无法创建对 - 构造函数
Can not Create pair - constructor
当 class Edge
对中的 类 之一时,我无法创建对
我知道是Edge里面的构造函数的问题,但是不知道哪里出了问题。
Edge 构造函数有一个 Token
因为我想确保只有 Vertex
类型的对象
可以创建对象 Edge
.
class Edge
{
public:
class ConstructionToken
{
private:
ConstructionToken();
friend class Vertex;
};
Edge( const Edge &) = default;
Edge( const ConstructionToken & ){};
private
//weight, etc...
};
void
Vertex::insert_edge( const std::string & end_point )
{
Edge new_edge( Edge::ConstructionToken );
std::pair<std::string,Edge> temp( end_point, new_edge );
//edges.insert( temp );
}
编译错误
lib/Vertex.cpp:12:32: error: no matching constructor for initialization of 'std::pair<std::string, Edge>'
std::pair<std::string,Edge> temp( end_point, new_edge );
^ ~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:262:5: note: candidate constructor not viable: no known conversion
from 'Edge (Edge::ConstructionToken)' to 'const Edge' for 2nd argument
pair(const _T1& __x, const _T2& __y)
这个
Edge new_edge( Edge::ConstructionToken );
声明一个函数,因为括号中的名称是一个类型。要声明变量,请使用
Edge new_edge{ Edge::ConstructionToken{} }; // C++11 or later
Edge new_edge((Edge::ConstructionToken())); // Historic dialects
当 class Edge
对中的 类 之一时,我无法创建对
我知道是Edge里面的构造函数的问题,但是不知道哪里出了问题。
Edge 构造函数有一个 Token
因为我想确保只有 Vertex
类型的对象
可以创建对象 Edge
.
class Edge
{
public:
class ConstructionToken
{
private:
ConstructionToken();
friend class Vertex;
};
Edge( const Edge &) = default;
Edge( const ConstructionToken & ){};
private
//weight, etc...
};
void
Vertex::insert_edge( const std::string & end_point )
{
Edge new_edge( Edge::ConstructionToken );
std::pair<std::string,Edge> temp( end_point, new_edge );
//edges.insert( temp );
}
编译错误
lib/Vertex.cpp:12:32: error: no matching constructor for initialization of 'std::pair<std::string, Edge>'
std::pair<std::string,Edge> temp( end_point, new_edge );
^ ~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/utility:262:5: note: candidate constructor not viable: no known conversion
from 'Edge (Edge::ConstructionToken)' to 'const Edge' for 2nd argument
pair(const _T1& __x, const _T2& __y)
这个
Edge new_edge( Edge::ConstructionToken );
声明一个函数,因为括号中的名称是一个类型。要声明变量,请使用
Edge new_edge{ Edge::ConstructionToken{} }; // C++11 or later
Edge new_edge((Edge::ConstructionToken())); // Historic dialects