首页 > 解决方案 > C++ - 使用变量指针调用函数

问题描述

我试图在 another.cpp 中外包一些功能,如果我someObjectanother.cpp中进行更改,它必须someObjectmain.cpp中生效。所以这基本上是现在的结构。哪个不影响camera


主文件

someObject camera;
setCamera(someObject camera);

int main()
{
    setCamera(camera);
    camera.doSomething();
}

另一个.cpp

someObject tempCamera;

void setCamera(someObject camera)
{
    tempCamera = camera;
}

void anotherFunction()
{
    tempCamera.doSomethingElse();
}

所以我想做的是tempCamera指向camera

但是当我这样做时:

someObject *tempCamera;

void setCamera(someObject camera)
{
    tempCamera = &camera;
}

anotherFunction()
{
    tempCamera.doSomethingElse();
}

我得到一个错误,表达式必须有一个class类型。我现在的问题是:如何从指针调用函数或我有什么替代方法?

标签: c++functionpointers

解决方案


您正在违反单一定义规则。您可能希望someObject tempCamera;在两个文件中引用相同的内容,您可以通过将除一个声明之外的所有声明标记为extern.

主文件

someObject camera;
setCamera(someObject camera);

int main()
{
   setCamera(camera);
   camera.doSomething();
}

另一个.cpp

extern someObject tempCamera;

void setCamera(someObject camera)
{
   tempCamera = camera;
}

void anotherFunction(){
   tempCamera.doSomethingElse();
}

第三个.cpp

extern someObject tempCamera;

void yetFurtherFunction(){
   tempCamera.doSomethingDifferent();
}

重复此声明很快就会变得乏味,因此通常将extern声明放在一个头文件中,该头文件#include位于多个 .cpp 文件(又名Translation Units)中


推荐阅读