【发布时间】:2018-10-09 10:11:28
【问题描述】:
我有两个类“DTreeEmbedder”和“修饰符”。 Embedder 是一个模板类,我想操作“DTreeEmbedder”的成员变量。
类 DTreeEmbedder:
class modifier; //forward declaration of modifier
using namespace ogdf;
using namespace ogdf::energybased::dtree;
template<int Dim>
class DTreeEmbedder
{
public:
//! constructor with a given graph, allocates memory and does
initialization
explicit DTreeEmbedder(GLFWwindow * w, const Graph& graph);
//! destructor
virtual ~DTreeEmbedder();
modifier* m_modifier;
在构造函数中
template<int Dim>
DTreeEmbedder<Dim>::DTreeEmbedder(GLFWwindow * w, const Graph& graph) :
m_graph(graph)
{
m_modifier = new modifier();
}
两个对象都需要相互访问,因此需要前向声明。
#pragma once
#include "DTreeEmbedder.h"
class modifier
{
public:
modifier(DTreeEmbedder<int>* e);
~modifier();
DTreeEmbedder<int>* m_embedder;
void pca_project(int pc1,int pc2);
};
pca_project 是一个应该改变值/调用 m_embedder 中的函数的函数
在修饰符的构造函数中:
modifier::modifier(DTreeEmbedder<int>* e)
{
m_embedder = e;
}
pca 函数:
void modifier::pca_project(int pc1, int pc2)
{
m_embedder->stop();
}
因此,我的方法是:
- 创建 DTreeEmbedder
- DTreeEmbedder 使用自身的指针创建修饰符
- 修饰符获得了指向 DTreeEmbedder 的指针,现在可以更改该对象的值
我的错误是:
"int": Invalid type for the non-type template parameter "Dim"
This pointer can not be converted from "DTreeEmbedder" to "DTreeEmbedder <Dim> &"
提前谢谢
【问题讨论】:
-
template<int Dim>是什么意思? -
@CinCout 它是一个非类型模板参数
-
那么它不应该是
DTreeEmbedder<int>,而应该是修饰符类中的DTreeEmbedder<42> -
@Konrad Rudolph DTreeEmbedder 是一个仅头文件,我需要命名空间才能访问另一个类
标签: c++ templates pointers forward-declaration