gpt4 book ai didi

c++ - 从模板继承非模板

转载 作者:行者123 更新时间:2023-11-30 04:10:39 24 4
gpt4 key购买 nike

操作系统:Linux Mint 15 肉桂色g++: 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)

我从 g++ 中的非模板类继承模板类时出现以下错误:

In file included from common/bChain.h:13:0,
from common/bProtein.h:12,
from common/bProtein.cpp:12:
common/bPeptide.h:27:31: error: expected template-name before ‘<’ token
common/bPeptide.h:27:31: error: expected ‘{’ before ‘<’ token
common/bPeptide.h:27:31: error: expected unqualified-id before ‘<’ token

这里已经问了几个类似的问题:

    http://stackoverflow.com/questions/10265861/error-expected-class-name-before-token-with-templates (template inheriting from template)
http://stackoverflow.com/questions/10548742/c-inheritance-and-templates-not-compiling (uninitialized members in base class)

但他们每个人都回答了不同的问题。 This post建议以下应该与 VisualStudio 一起工作我认为是 g++ 的错误。这篇文章最接近,但并没有完全解决这个问题。

我有三个类,VertexSetPeptideChainVertexSet为模板类,Peptide为非模板类​​,继承自VertexSetChain继承自多肽:

VertexSet.h:

#ifndef B_VERTEXSET_H
#define B_VERTEXSET_H

//////////////// STL
#include <vector>

//////////////// project
#include <Vertex.h>
#include <Spatial.h>
#include <Pool.h> // for pool resources

namespace griddock { template <typename T> class VertexSet; };

/** @brief \c VertexSet \c
* @author Stephen J. Bush
* @copyright Creative Commons Attribution Non-Commercial License V2.0
* @copyright Creative Commons Attribution ShareAlike License V3.0
* @par
*/
template <typename T>
class griddock::VertexSet
: virtual public Spatial
{
/////////////////////////////////////////////////////////////////////
// Tor
protected:
VertexSet();
VertexSet(const VertexSet &rhs);
public:
~VertexSet();

/* ... more functions here ...*/
};

#define GVXS griddock::VertexSet<T>

////////////////////////////////////////////////////////////////////////
///@name Tor
///@{
template <typename T>
GVXS::VertexSet()
: vertex_(),
min_(),
max_()
{
}

template <typename T>
GVXS::VertexSet(const VertexSet &rhs)
: vertex_(rhs.vertex_),
min_(),
max_()
{
}


template <typename T>
GVXS::~VertexSet()
{
clear();
}

///@}
// .
////////////////////////////////////////////////////////////////////////

#undef GVXS

#endif

Peptide.h

#ifndef B_PEPTIDE_H
#define B_PEPTIDE_H

//////////////// STL
#include <vector>
#include <string>

//////////////// project
#include <Pool.h>
#include <Residue.h>
#include <Spatial.h>
#include <Vertex.h>
#include <VertexSet.h>
#include <File.h>
#include <IPeptide.h>

namespace griddock { class Peptide; };


/** @brief \c Peptide \c implements a data structure to store protein residues
* @author Stephen J. Bush
* @copyright Creative Commons Attribution Non-Commercial License V2.0
* @copyright Creative Commons Attribution ShareAlike License V3.0
* @par
*/
class griddock::Peptide
: virtual public VertexSet<Residue>,
virtual public IPeptide
{
/////////////////////////////////////////////////////////////////////
// Tor
public:
Peptide();
Peptide(const Peptide &peptide);
~Peptide();

/* ...other functions here...*/

};

#endif

肽.cpp

//////////////// header
#include <Peptide.h>

//////////////// STL
#include <vector>
#include <string>

//////////////// project
#include <Residue.h>
#include <File.h>

using namespace std;
using namespace griddock;

#define GPEP Peptide

////////////////////////////////////////////////////////////////////////
///@name Tor
///@{
GPEP::Peptide()
: VertexSet<Residue>()
{
}

GPEP::Peptide(const Peptide &peptide)
: VertexSet<Residue>(),
vertex_(peptide.vertex_),
chainid_(peptide.chainid_)
{
}


GPEP::~Peptide()
{
clear();
}

///@}
// .
////////////////////////////////////////////////////////////////////////

最佳答案

原来我需要的只是确保 Chain 显式调用 Peptide 构造函数:Chain() : Peptide() {}

关于c++ - 从模板继承非模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com