C++/DX11从.h移动到.cpp会导致错误
C++/DX11 Moving from .h to .cpp causes error
我正在开发一些directX
,从教程代码开始,并逐渐将其转换为自己的类系统和cpp文件等。
到目前为止一切都很顺利,但我刚刚开始修改"Camera.h"answers"Camera.cpp"。我在头中有类函数,当我把它放在它的类文件中时,它会出现一个错误。我有一些盖帽等等,但我看不出有什么缺陷。
编辑前的camera.h
https://i.stack.imgur.com/Evxof.png
编辑后的camera.h
#ifndef CAMERA_H_
#define CAMERA_H_
#include "Player.h"
#include "RandomVariables.h"
class Camera {
public:
void UpdateCamera();
float camPitch;
float camYaw;
float Zoom_Amount; //zoom amount from Model_1.Player
float charCamDist; //distance from Model_1.Player
XMVECTOR camPosition;
XMVECTOR camTarget;
XMVECTOR camUp;
XMVECTOR camRight;
XMVECTOR camForward;
XMMATRIX camRotationMatrix;
XMMATRIX Rotationx;
XMMATRIX Rotationy;
XMMATRIX Rotationz;
XMMATRIX camView;
XMMATRIX camProjection;
};
Camera MainCamera;
#endif
我删除了void Camera::UpdateCamera()并将其放在Camera.cpp中,它会出现未定义的错误等等,如果void Camera:()在头文件中,则不会发生这些错误,所以我很困惑:S
错误列表
https://i.stack.imgur.com/7G21V.png
Camera.cpp移动更新相机后
#include "Camera.h"
void Camera::UpdateCamera(){
MainCamera.charCamDist = 135.0f;
MainCamera.camTarget = mainPlayer.playerPos;
MainCamera.camTarget = XMVectorSetY(MainCamera.camTarget, XMVectorGetY(MainCamera.camTarget)+5.0f);
MainCamera.camTarget = XMVectorSetX(MainCamera.camTarget, XMVectorGetX(MainCamera.camTarget) -MainCamera.Zoom_Amount);
MainCamera.camRotationMatrix = XMMatrixRotationRollPitchYaw(-MainCamera.camPitch, MainCamera.camYaw, 0);
MainCamera.camPosition = XMVector3TransformNormal(DefaultForward, MainCamera.camRotationMatrix );
MainCamera.camPosition = XMVector3Normalize(MainCamera.camPosition);
MainCamera.camPosition = (MainCamera.camPosition * MainCamera.charCamDist) + MainCamera.camTarget;
MainCamera.camForward = XMVector3Normalize(MainCamera.camTarget - MainCamera.camPosition); // Get forward vector based on target
MainCamera.camForward = XMVectorSetY(MainCamera.camForward, 0.0f); // set forwards y component to 0 so it lays only on
// the xz plane
MainCamera.camForward = XMVector3Normalize(MainCamera.camForward);
MainCamera.camRight = XMVectorSet(-XMVectorGetZ(MainCamera.camForward), 0.0f, XMVectorGetX(MainCamera.camForward), 0.0f);
MainCamera.camUp =XMVector3Normalize(XMVector3Cross(XMVector3Normalize(MainCamera.camPosition - MainCamera.camTarget), MainCamera.camRight));
MainCamera.camView = XMMatrixLookAtLH( MainCamera.camPosition, MainCamera.camTarget, MainCamera.camUp );
};
随机变量.cpp
//Global Declarations - Interfaces//
#ifndef RAND_H
#define RAND_H
#include "Models.h"
#include "Player.h"
#include "Camera.h"
///start
My_Player mainPlayer;
XMMATRIX WVP;
XMVECTOR DefaultForward = XMVectorSet(0.0f,0.0f,1.0f, 0.0f);
XMVECTOR DefaultRight = XMVectorSet(1.0f,0.0f,0.0f, 0.0f);
float tilt_X = 0.0f;
int NumSphereVertices;
int NumSphereFaces;
XMMATRIX sphereWorld;
XMMATRIX Scale;
XMMATRIX Translation;
///end
IDXGISwapChain* SwapChain;
ID3D11Device* d3d11Device;
ID3D11DeviceContext* d3d11DevCon;
ID3D11RenderTargetView* renderTargetView;
ID3D11DepthStencilView* depthStencilView;
ID3D11Texture2D* depthStencilBuffer;
ID3D11VertexShader* VS;
ID3D11PixelShader* PS;
ID3D11PixelShader* D2D_PS;
ID3D10Blob* D2D_PS_Buffer;
ID3D10Blob* VS_Buffer;
ID3D10Blob* PS_Buffer;
ID3D11InputLayout* vertLayout;
ID3D11Buffer* cbPerObjectBuffer;
ID3D11BlendState* d2dTransparency;
ID3D11RasterizerState* CCWcullMode;
ID3D11RasterizerState* CWcullMode;
ID3D11SamplerState* CubesTexSamplerState;
ID3D11Buffer* cbPerFrameBuffer;
ID3D10Device1 *d3d101Device;
IDXGIKeyedMutex *keyedMutex11;
IDXGIKeyedMutex *keyedMutex10;
ID2D1RenderTarget *D2DRenderTarget;
ID2D1SolidColorBrush *Brush;
ID3D11Texture2D *BackBuffer11;
ID3D11Texture2D *sharedTex11;
ID3D11Buffer *d2dVertBuffer;
ID3D11Buffer *d2dIndexBuffer;
ID3D11ShaderResourceView *d2dTexture;
IDWriteFactory *DWriteFactory;
IDWriteTextFormat *TextFormat;
IDirectInputDevice8* DIKeyboard;
IDirectInputDevice8* DIMouse;
ID3D11Buffer* sphereIndexBuffer;
ID3D11Buffer* sphereVertBuffer;
ID3D11VertexShader* SKYMAP_VS;
ID3D11PixelShader* SKYMAP_PS;
ID3D10Blob* SKYMAP_VS_Buffer;
ID3D10Blob* SKYMAP_PS_Buffer;
ID3D11ShaderResourceView* smrv;
ID3D11DepthStencilState* DSLessEqual;
ID3D11RasterizerState* RSCullNone;
ID3D11BlendState* Transparency;
#endif
使用externs
并仅在相关的cpp文件中声明类对象就解决了这个问题。
相关文章:
- 在cygwin中测试新的boost安装时出现cpp错误
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 输出错误,问题是找到总和5000位数字cpp
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 处理简单 cpp 类构造函数中的错误
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 在调试模式下编译时qrc_resource.cpp错误
- Cpp 错误中的<<运算符
- CPP 错误 LNK2019:未解析的外部符号 CPP
- CS106b 库矢量.cpp错误 C2143:语法错误:'<'之前缺少';'
- 重载新运算符时的 CPP 错误
- .cpp错误:与"std::cerr "中的"运算符<"不匹配<"正在转换文件 \" ""
- Cpp错误,包括Visual studio 2012中的多个文件
- 编译cocos2d-x插件时出现Cpp错误