c++ - C++ - 使用变量指针调用函数
问题描述
我试图在 another.cpp 中外包一些功能,但如果我someObject
在another.cpp中进行更改,它必须someObject
在main.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
类型。我现在的问题是:如何从指针调用函数或我有什么替代方法?
解决方案
您正在违反单一定义规则。您可能希望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)中
推荐阅读
- apache - 运行 docker 文件,但说端口已被占用
- c# - 如何在c#中过滤掉解决方案(.sln)文件中的所有.cs文件
- git - 个人对 git 子模块的修改
- c++ - 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但指针类型不兼容
- firebase - 错误:切换 bw 多个选项卡时出现问题。扑
- blazor - @code 内的代码在 blazor 服务器端运行在哪里?
- python - 将 Python 脚本制成可执行文件:如何修剪输出
- typescript - 在数据库 knex 插入后,不将数据发送到数据库,而是返回数据
- highcharts - 同月的highchart柱形图颜色
- react-native - 0.62.x 中维度的 React Native 状态栏事件