- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
boost图库中remove_edge
的函数调用有一个很奇怪的问题。
当我在主函数中调用它时,编译和运行时都可以;但是,当我在模板函数 test_remove_edge
中调用它时,出现编译错误。
代码示例和编译错误消息在这里。
#include <iostream>
#include <vector>
#include <string>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/max_cardinality_matching.hpp>
#include <boost/graph/maximum_weighted_matching.hpp>
using namespace boost;
template <typename Graph>
void test_remove_edge(const Graph& g)
{
typedef typename graph_traits<Graph>::edge_iterator edge_iterator_t;
edge_iterator_t ei, ei_end;
for (boost::tie(ei,ei_end) = edges(g); ei != ei_end; ++ei)
{
std::cout << typeid(*ei).name() << ", " << typeid(g).name() << std::endl; // exactly same with the one in main
remove_edge(*ei, g); // compile error, see message pasted below
}
}
int main(int argc, const char * argv[])
{
typedef property<edge_weight_t, float, property<edge_index_t, int>> EdgeProperty;
typedef adjacency_list<vecS, vecS, undirectedS, no_property, EdgeProperty> my_graph;
const int n_vertices = 8;
my_graph g(n_vertices);
add_edge(1,2,EdgeProperty(5),g);
add_edge(0,4,EdgeProperty(1),g);
add_edge(1,5,EdgeProperty(4),g);
add_edge(2,6,EdgeProperty(1),g);
add_edge(3,7,EdgeProperty(4),g);
typedef typename graph_traits<my_graph>::edge_iterator edge_iterator_t;
edge_iterator_t ei, ei_end;
for (boost::tie(ei,ei_end) = edges(g); ei != ei_end; ++ei)
{
std::cout << typeid(*ei).name() << ", " << typeid(g).name() << std::endl; // exactly same with the one in test_remove_edge
remove_edge(*ei, g); // compile ok, runtime ok
}
test_remove_edge(g);
return 0;
}
编译错误信息:
Candidate template ignored: deduced type
'undirected_graph_helper >, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::no_property, boost::property >, boost::no_property, boost::listS>::config> &'
of 2nd parameter does not match adjusted type
'const boost::adjacency_list >, boost::no_property, boost::listS>'
of argument [with EdgeOrIter = boost::detail::edge_desc_impl, Config = boost::detail::adj_list_gen >, boost::no_property, boost::listS>, boost::vecS, boost::vecS, boost::undirectedS, boost::no_property, boost::property >, boost::no_property, boost::listS>::config]
我确信编译器会为这两种情况选择相同的重载函数 remove_edge
(Xcode 告诉我)。我还知道调用 remove_edge
时参数类型是相同的,通过检查 typeid(T).name() 的输出。
感到绝望,非常感谢任何帮助!
[我已经编辑了这个问题,因为我简化了导致问题的示例] 我在使用 clang 3.9 的 Travis CI(dist:trusty)上收到以下错误: error: call to implicitly
我是 Haskell 的初学者,正在实现一些基本的代数,比如 class (Eq g) => AbelianGroup g where gplus :: g -> g -> g gne
来自这个问题: Using enum values in combination with SFINAE 我尝试实现: enum Specifier { One, Two, T
If P is a class and P has the form simple-template-id, then the transformed A can be a derived class
这是初学者的问题,但我无法在任何地方识别出任何答案。 以下代码: class A a where foo :: a class A a => B a where bar :: a bar
我正在写一个 Haskell 库,它使用 Data.Vector的。库函数写成功了,不知道怎么加签名。下面是一个说明问题的简单示例: 将合格的 Data.Vector.Generic 导入为 V --
我应该如何在 Deducer 的线性回归模型生成器中生成如下公式 lm(ozone~temp*wind*rad+I(rad^2)+I(temp^2)+I(wind^2)) 在 Outcomes文本框我
temp.names#6 A template-id is valid if there are at most as many arguments as there are parameters o
我有以下代码: class Coll c e where map :: (e1 -> e2) -> c e1 -> c e2 merge :: (e -> e -> e) -> e -
我偶然发现,为什么模板参数演绎在这里不起作用?最近,答案可以归结为“这是一个非演绎的背景”。。具体地说,第一个说是这样的事情,然后重定向到“细节”的标准,而第二个引用的标准,至少可以说是神秘的。。有人
我正在尝试创建另一个 Random 实例,但遇到了类型错误。我将其简化为以下 ghci session : GHCi, version 8.6.5: λ> import System.Random λ
我正在修改以下代码作为作业的一部分: rand :: Random a => State StdGen a rand = do gen (a, a) -> State StdGen a。我编
当我尝试编译这个时: module Main where import qualified Data.Vector.Unboxed.Mutable as MV import Control.Monad
我正试图完成我的一个学校项目,但我遇到了一个问题。我正在尝试在我的工作中使用模板,但似乎我并不真正了解该怎么做。这是我的代码的一部分: 主要.cpp #include "stdafx.h" #incl
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在做一些看起来像这样的包装器: #include template void Apply(void (T::*cb)(Value), T* obj, Value v) { (obj->*
我对 Haskell 的类型系统有以下问题:我试图声明一个数据类型并从函数返回一个包含该类型元素的列表。不幸的是,即使是最小的测试用例,例如 data SampleType = SampleTypeC
来 self 的 previous question ,我一直在尝试制定一些单子(monad)代码。首先,这是我正在使用的状态机函数: import Control.Monad import Cont
我在 .hs 文件中有以下代码 module TypeInference1 where f :: Num a => a -> a -> a f x y = x + y + 3 然后,如果我检查 的类型
这是一个非常简单的程序,我不知道我做错了什么。我在网上看过,但找不到任何有用的东西。我的 getline(cin, movieName) 有问题,但我不知道是什么。 //This program wi
我是一名优秀的程序员,十分优秀!