gpt4 book ai didi

c++ - 声明成员函数时 *New() 是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 15:04:54 28 4
gpt4 key购买 nike

我正在开发一个 VTK 程序并找到了一个类(特别是这个:Image Region),我需要将其合并到我的代码中。为此,我制作了单独的 ImageRegion.h 和 ImageRegion.cpp 文件,以便可以轻松地将它们包含在项目中。我的问题是

static vtkBorderCallback *New()

我不知道如何在 .cpp 文件中实现的功能,或者,老实说,它的作用是什么。它有什么作用?有必要吗?

编译时出现错误:

/home/Desktop/test/src/ImageRegion.cpp:7:10: error: ‘vtkBorderCallback::vtkBorderCallback’ names the constructor, not the type

我的 .h 文件:

//ImageRegion.h
#pragma once

#include <vtkSmartPointer.h>
#include <vtkActor.h>
#include <vtkAssemblyNode.h>
#include <vtkAssemblyPath.h>
#include <vtkBorderRepresentation.h>
#include <vtkCommand.h>
#include <vtkCoordinate.h>
#include <vtkImageMapper3D.h>
#include <vtkImageActor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkPolyData.h>
#include <vtkPropPicker.h>
#include <vtkProperty2D.h>
#include <vtkBorderWidget.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>

class vtkBorderCallback : public vtkCommand
{
public:
vtkBorderCallback();
static vtkBorderCallback *New();
virtual void Execute(vtkObject *caller, unsigned long, void*);
void SetRenderer(vtkSmartPointer<vtkRenderer> ren);
void SetImageActor(vtkSmartPointer<vtkImageActor> im);
double coords[6];



private:
vtkSmartPointer<vtkRenderer> Renderer;
vtkSmartPointer<vtkImageActor> ImageActor;

};

还有我的 .cpp 文件:

//ImageRegion.cpp
#include "ImageRegion.h"


vtkBorderCallback::vtkBorderCallback(){}


static vtkBorderCallback::vtkBorderCallback* New()
{
return new vtkBorderCallback;
}

void vtkBorderCallback::Execute(vtkObject *caller, unsigned long, void*)
{
//Do stuff, from original VTK example code
}

void vtkBorderCallback::SetRenderer(vtkSmartPointer<vtkRenderer> ren) {this->Renderer = ren;}
void vtkBorderCallback::SetImageActor(vtkSmartPointer<vtkImageActor> im) {this->ImageActor = im;}

非常感谢任何帮助。

最佳答案

这个

static vtkBorderCallback *New();

是一个名为 Newstatic 成员函数,不带任何参数,并返回指向 vtkBorderCallback 的指针。

在实现中,你应该省略static。您还需要将函数放在其类的范围内:

vtkBorderCallBack*  vtkBorderCallback::New()
{// ^^^^^^^^^^^^^^^^^^^
return new vtkBorderCallback; // danger! Caller needs to delete this eventually
}

关于c++ - 声明成员函数时 *New() 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18611973/

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