我在使用C ++ / CLI创建具有命名空间的托管类时遇到问题。
我想做以下事情:
#pragma once
#include "abc.h"
#ifdef _MANAGED
#using <system.dll>
using namespace System;
using namespace System::IO;
using namespace System::Collections::Generic;
using namespace System::Globalization;
#endif
namespace Animals
{
public ref class Pets
{
Pets::Pets(){}
};
}
我有几个不同的问题:
A)当我将此代码放入.cpp文件时,它编译得很好。但是,看起来命名空间没有按预期工作(请参阅我创建的这个问题:Namespace not recognized in C++/CLI)列出的唯一答案是我必须在头文件中声明类/命名空间。但这是一个问题,因为..
B)当编译器放在头文件中时,编译器会抱怨public ref class Pets
。它说必须有语法错误。
intellisense错误:
expected a declaration
其他错误:
'{' : missing function header (old-style formal list?)
syntax error: 'public'
我似乎无法找到任何显示标题和cpp文件的C ++ / CLI示例。
所以我的问题是:如何让托管类和命名空间按预期工作? (即我做错了什么?)
如果我需要提供更多信息,请与我们联系。
提前感谢您的时间和耐心:)
答案 0 :(得分:3)
在头文件中应该只有前向声明。
// abc.h
#pragma once
namespace Animals
{
public ref class Pets
{
Pets(); // forward declaration
// Pets::Pets is redundant and wrong, because you are inside
// the class Pets
};
}
// abc.cpp
#include "abc.h"
#ifdef _MANAGED
#using <system.dll>
using namespace System;
using namespace System::IO;
using namespace System::Collections::Generic;
using namespace System::Globalization;
#endif
namespace Animals
{
Pets::Pets() {} // implementation
// Now Pets::Pets() is right, because you dont write the class... wrapper again.
}