0
votes

I created a "CLR Empty Project (.Net Core)" project using Visual Studio 2019.

I simply created a new class using the 'add class' menu option and it generated this class. I added the function called Test in the header:


using namespace System;

public ref class Class1 {
    // TODO: Add your methods for this class here.

    void Test();
};

Then using visual studio's generate implementation option it created this function defenition in the .cpp file:

#include "EngineEditorLayer.h"

#include "pch.h"

void Class1::Test() { throw gcnew System::NotImplementedException(); }

When compiling it gave me this error :

error C2653: 'Class1': is not a class or namespace name

I can only resolve this error by moving the implementation to the header file.

Am I missing something? Is there a setting I have to change to enable .cpp compilation? Is there a compiler bug that prevents me from doing this currently?

1
You ought to get a warning for this code, easy to miss when you focus too much on the error. pch.h must be #included first. The compiler skips anything until it finds it, so the #include for EngineEditorLayer.h doesn't do anything.Hans Passant

1 Answers

1
votes

Hans Passant from the comments was right. The pch.h has to be included first.

I unfortunately never got the warning. This was my output log:

1>------ Build started: Project: EngineEditorLayer, Configuration: Debug x64 ------
1>EngineEditorLayer.cpp
1>E:\Other Projects\PixEngine\EngineEditorLayer\EngineEditorLayer.cpp(7,18): error C2653: 'Class1': is not a class or namespace name
1>Done building project "EngineEditorLayer.vcxproj" -- FAILED.