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