在C/C++LI中创建托管类和名称空间时出现问题
作者:互联网
我在用C/C++LI创建带有名称空间的托管类时遇到问题.
我要执行以下操作:
#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)编译器将公共引用类Pets放在头文件中时会抱怨.它说必须有语法错误.
智能感知错误:
期望一个声明
其他错误:
‘{‘:缺少函数标头(旧式的正式列表?)
语法错误:“公共”
我似乎找不到任何能同时显示标头和cpp文件的C/C++LI示例.
所以我的问题是:如何使托管类和名称空间都能按预期工作? (即我在做什么错?)
请让我知道是否需要提供更多信息.
预先感谢您的时间和耐心:)
解决方法:
在头文件中,应该只包含前向声明.
// 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.
}
标签:namespaces,c-cli,c 来源: https://codeday.me/bug/20191208/2089424.html