当前位置: 首页 > 知识库问答 >
问题:

C++类向量反推错误

贝德辉
2023-03-14

/usr/include/C++/4.8/ext/new_allocator.h:在实例化'void__gnu_cxx::new_allocator<_tp>::construct(_up*,_args&&...)[with_up=UNDIR_W_EDGE;_args={const UNDIR_W_EDGE&};_tp=UNDIR_W_EDGE]':/usr/include/c++/4.8/bits/alloc_traits.h:254:4:从'static typename_alloc>::_s_construc(_alloc&,_tp*,_args&&...)[with_tp=UNDIR_W_EDGE;_args={const UNDIR_W_EDGE&};_alloc=std::allocator;typename std::enable_ifalloc>::_construct_helper<_tp,_args>::value,void>::type=void]“/usr/include/c++/4.8/bits/alloc_traits.h:393:57:”static)...))std::allocator_traits<_alloc>::construc(_alloc&,_tp*,_args&&...)[with_tp=UNDIR_W_EDGE;_args={const UNDIR_W_EDGE&};_alloc=std::allocator;decltype(_s_construct(__a,__p,(forward<_args>)(std::allocator_traits::construct::__args)...)=]tp=UNDIR_W_EDGE;_alloc=std::allocator;std::vector<_tp,_alloc>::value_type=UNDIR_W_EDGE]“../src/graph.h:31:5:要求从'void graph::addedge(常量Edge&)[with Edge=UNDIR_W_EDGE]”../src/main.cpp:32:13:要求从这里/usr/include/c++/4.8/ext/new_allocator.h:120:4:错误:调用“UNDIR_W_EDGE::UNDIR_W_EDGE (_args)...);}

#include "vector"

template <typename Edge>
class GRAPH {
 private:
 // Implementation-dependent code
int Vcnt;
int Ecnt;
std::vector<std::vector< Edge > > adj;
 public:
GRAPH(int x):Vcnt(x),Ecnt(0) {

    adj.resize(Vcnt);
}
 virtual ~GRAPH();
 virtual int V() const;
 virtual int E() const;
 virtual void addEdge(const Edge &e){
    adj[e.V()].push_back(e);
    adj[e.W()].push_back(e);
    Ecnt++;
 };
 virtual std::vector< Edge > adjIterator(int) const;
};
 class UNDIR_W_EDGE {
    int v,w;
    float weight;

    public:
     UNDIR_W_EDGE(int v, int w, float weight);
     UNDIR_W_EDGE(UNDIR_W_EDGE &);
     virtual ~UNDIR_W_EDGE();
     virtual int V()const;
     virtual int W()const;
     virtual float WEIGHT()const;
     virtual int CompareTo(UNDIR_W_EDGE e)const;
    };
inline int UNDIR_W_EDGE::CompareTo(UNDIR_W_EDGE e)const{
if(this->weight > e.weight) return 1;
else if (this->weight < e.weight)return -1;
else                            return 0;
}  
GRAPH<UNDIR_W_EDGE> g(10);
UNDIR_W_EDGE e(0,7,0.0);
g.addEdge(e);

共有1个答案

赫连鸿振
2023-03-14

您没有undir_w_edge的复制构造函数。

copy构造函数在std::vector 以及compareto中都是必需的,copy构造函数按值取参数(出于某种原因)。

你确实有这个:

UNDIR_W_EDGE(UNDIR_W_EDGE &);
UNDIR_W_EDGE(const UNDIR_W_EDGE&);
 类似资料:
  • 首先是一些背景。正如C 17标准所述: [vector.overview]/3如果分配器满足分配器完整性要求17.6,则在实例化vector时可使用不完整类型T。3.5.1.T应在引用向量的任何结果特化成员之前完成。 我在本回购协议中尝试了3种方案(代码复制在底部): 包含不完整向量类型的类在同一头文件中声明(默认ctor/dtor)并定义 编译用b. h包括: 编译用b. h包括: 我的问题是,

  • 我使用的是自定义类型Vector的线程安全队列。它显示以下错误。我不确定我在这里错过了什么。 错误C2664“std::vector>::vector(std::vector<_ty,std::allocator<_ty>>&&,constalloc&)noexcept()”:无法将参数2从“int”转换为“const std::allocator<_ty>&”。

  • 我正在尝试应用文本排序算法,不幸的是,我有一个错误 我有以下错误: 回溯(最近一次呼叫最后一次): 文件“bayes_classif.py”,第22行,在 数据集=pd。read_csv('train.csv',编码='utf-8') 文件“/usr/local/lib/python3.6/dist-packages/pandas/io/parsers.py”,第678行,在解析器中 返回读取(文

  • 本文向大家介绍C++ 向量迭代器,包括了C++ 向量迭代器的使用技巧和注意事项,需要的朋友参考一下 示例 begin将an返回iterator到序列容器中的第一个元素。 end返回iterator末尾的第一个元素。 如果矢量对象const,无论是begin和end返回const_iterator。如果const_iterator即使向量不返回,也要返回const,则可以使用cbegin和cend。

  • 作为一个学习项目,我正在编写一个通过TCP的聊天服务器。我今天一直在修补ws crate,但我遇到了一个问题。这是我编写的代码,修改了他们的服务器示例。 当我尝试编译它时,我得到一个错误: 为什么会这样?我怎样才能解决这个问题?

  • MacOS Catalina 10.15.7,VSCode 1.64.2(通用):我让智能感知为我的项目工作没有问题,但是无论出于什么原因,它在某些情况下都停止工作: 每当我将某些东西分配给“自动变量”时,例如:我会得到智能感知错误:。 类枚举没有被识别,所以我不能使用或获得任何与枚举相关的自动完成支持。 这些是最常见的问题,但我要说智能感知通常不能正常工作。 我删除了与VSCode相关的所有内容