我尝试从 Seqan 网站复制迷你领结的示例。请注意,该示例来自版本 1.4.2,而不是当前版本。
当我编译时,我有一个错误。最小的可重现示例是:
#include <seqan/index.h>
#include <seqan/store.h>
using namespace seqan;
int main()
{
typedef Index<StringSet<Dna5String>, FMIndex<> > TIndex;
typedef Iterator<TIndex, TopDown<ParentLinks<> > >::Type TIter;
FragmentStore<> fragStore;
StringSet<Dna5String> text;
TIndex fmIndex(text);
TIter it(fmIndex);
it = TIter(fmIndex); // This does not work
return 0;
}
编译错误很长。它开始于:
In file included from test.cpp:1:
In file included from /usr/include/seqan/index.h:172:
/usr/include/seqan/index/index_fm_stree.h:469:16: error: no matching constructor for initialization of 'TVertexDescriptor' (aka 'VertexFM<unsigned long, seqan::SimpleType<unsigned char, seqan::Dna5_> >')
return TVertexDescriptor(back(it.history).range, back(it.history).repLen, back(it.history).lastChar);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/seqan/index/index_esa_stree.h:245:27: note: in instantiation of function template specialization 'seqan::nodeUp<seqan::StringSet<seqan::String<seqan::SimpleType<unsigned char, seqan::Dna5_>,
seqan::Alloc<void> >, seqan::Owner<seqan::Tag<seqan::Default_> > >, void, seqan::FMIndexConfig<void, unsigned long, 1, 1>, seqan::Preorder>' requested here
_parentDesc = nodeUp(_origin);
^
/usr/include/seqan/index/index_esa_stree.h:366:29: note: in instantiation of function template specialization 'seqan::Iter<seqan::Index<seqan::StringSet<seqan::String<seqan::SimpleType<unsigned char,
seqan::Dna5_>, seqan::Alloc<void> >, seqan::Owner<seqan::Tag<seqan::Default_> > >, seqan::FMIndex<void, seqan::FMIndexConfig<void, unsigned long, 1, 1> > >, seqan::VSTree<seqan::TopDown<seqan::Preorder> >
>::operator=<seqan::ParentLinks<seqan::Preorder> >' requested here
*(TBase*)(this) = _origin;
^
test.cpp:17:8: note: in instantiation of member function 'seqan::Iter<seqan::Index<seqan::StringSet<seqan::String<seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<void> >,
seqan::Owner<seqan::Tag<seqan::Default_> > >, seqan::FMIndex<void, seqan::FMIndexConfig<void, unsigned long, 1, 1> > >, seqan::VSTree<seqan::TopDown<seqan::ParentLinks<seqan::Preorder> > > >::operator='
requested here
it = TIter(fmIndex);
^
API 似乎略有变化,但我不能完全确定它。
我编译:
clang++ -Wall -Wextra -Weffc++ -O2 -o testSeqan test.cpp -lrt
with clang++ 6.0.0-1ubuntu2 x86_64-pc-linux-gnu
, 但g++ Ubuntu 7.3.0-16ubuntu3
给出了类似的(尽管可读性较差)结果,以及 Seqan 版本 2.3.2。
我应该改变什么?