C ++-带有变量指针的调用函数

时间:2018-07-26 14:26:19

标签: c++ function pointers

我尝试将 another.cpp 中的某些功能外包,但是如果我更改 another.cpp 中的someObject,则必须生效someObject main.cpp 中。 所以这基本上是现在的结构。不会影响camera


main.cpp

someObject camera;
setCamera(someObject camera);

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

another.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类型。 我现在的问题是:如何从指针调用函数或有什么替代方法?

1 个答案:

答案 0 :(得分:0)

您正在违反One Definition Rule。您可能想要在两个文件中引用相同的someObject tempCamera;,可以通过将除一个声明外的所有声明都标记为extern来实现。

main.cpp

someObject camera;
setCamera(someObject camera);

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

another.cpp

extern someObject tempCamera;

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

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

third.cpp

extern someObject tempCamera;

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

重复此声明很快就会变得很乏味,因此通常将extern声明放在多个{.1}}文件中的头文件中({em> Translation Units em>)