我正在学习 C++ CLI。我只是想创建一个Microsoft.Xna.Framework.Game继承和覆盖几个方法的类。
创建了一个头文件,如下所示:
//Game1.h
#include "stdafx.h"
#pragma once
namespace CLRGame {
public ref class Game1 : public Microsoft::Xna::Framework::Game
{
public:
Game1();
private:
Microsoft::Xna::Framework::GraphicsDeviceManager ^ graphics;
Microsoft::Xna::Framework::Graphics::SpriteBatch ^spriteBatch;
protected:
void Initialize() override;
void LoadContent() override;
void UnloadContent() override;
void Update(Microsoft::Xna::Framework::GameTime ^gameTime) override;
void Draw(Microsoft::Xna::Framework::GameTime ^gameTime) override;
};
}
描述了实现:
//Game1.cpp
#include "Game1.h"
#include "stdafx.h"
using namespace Microsoft::Xna::Framework;
using namespace Microsoft::Xna::Framework::Graphics;
using namespace Microsoft::Xna::Framework::Design;
using namespace Microsoft::Xna::Framework::Input;
namespace CLRGame {
Game1::Game1()
{
graphics = gcnew GraphicsDeviceManager(this);
Content->RootDirectory = "Content";
}
void Game1::Initialize()
{
Game::Initialize();
}
void Game1::LoadContent()
{
Game::LoadContent();
spriteBatch = gcnew SpriteBatch(GraphicsDevice);
}
void Game1::UnloadContent()
{
Game::UnloadContent();
}
void Game1::Update(Microsoft::Xna::Framework::GameTime ^gameTime)
{
Game::Update(gameTime);
KeyboardState keyboardState = Keyboard::GetState();
if (keyboardState.IsKeyDown(Keys::Escape)) {
Exit();
}
}
void Game1::Draw(Microsoft::Xna::Framework::GameTime ^gameTime)
{
Game::Update(gameTime);
GraphicsDevice->Clear(Color::Bisque);
}
}
简而言之,我只是尝试在创建后立即重复 MonoGame (C#) 项目结构。
Intellisense(VS 2017 Enterprise)并没有发誓,但是,当我尝试编译这个优点时,我得到了一堆错误,这些错误与对应的 .h 在 .cpp 文件中不可见这一事实有关:

如您所见,首先Ошибка C2653 Game1: не является именем класса или пространства имен CLRPP。
我没有触及项目的设置、编译器以及一般的任何设置。
项目结构:

我不知道该做什么以及它可以与什么联系起来。
预编译的头文件
#include "stdafx.h"应该只包含在翻译单元(.cpp 文件)中,并且它必须放在第一位,因为它上面的所有内容都被忽略了。最好通过编译器选项包含它/FI"stdafx.h"在项目结构的屏幕截图中,您实际上拥有项目过滤器的结构,而不是文件。