函数返回自定义的托管类类型
function return with custom defined managed class type
我在使用 C++/CLI 时遇到问题。 我定义了一个名为 Person 的类,它是一个包含 get 和 sets 的简单类: #pragma 一次 使用命名空间系统;
namespace CLI
{
public ref class Person
{
public:
Person();
// gets and sets
private:
String^ name;
int age;
};
}
然后我用 person 定义了一个矩阵类: #pragma 一次 #include "人.h" 使用命名空间系统;
namespace CLI
{
// Next is the managed wrapper of Logic:
public ref class Matrix
{
public:
Matrix();
Person^ getPerson(int i, int j)
{
return paa[i][j]; // no problem
}
void Destroy();
private:
array<array<Person^>^>^ paa;
};
}
很奇怪的是,如果我将getPerson()函数移动到.cpp,就会出现错误。
以下是Matrix.h和Matrix.cpp有错误:
// Matrix.h
#pragma once
#include "Person.h"
using namespace System;
namespace CLI
{
public ref class Matrix
{
public:
Matrix();
Person^ getPerson(int i, int j);
void Destroy();
private:
array<array<Person^>^>^ paa;
};
}
// Matrix.cpp
#include "Matrix.h"
CLI::Matrix::Matrix()
{
// init the matrix
}
Person^ CLI::Matrix::getPerson(int i, int j) // errors here
{
return paa[i][j];
}
其中一个错误显示"未定义的标识符:人",此错误指向函数返回类型。我尝试在函数体中写"Person^ p = gcnew Person;",没有错误。 另一个错误说"函数定义与.h文件中的函数定义不兼容"(我没有使用英文版本的VS,我翻译了消息,可能不是很准确。
如果我更改返回类型任何未自定义的内容,例如 int、String^,没关系。
如果需要更多信息,请告诉我。
Person^ CLI::Matrix::getPerson(int i, int j)
类Person
是在CLI
命名空间中定义的,但此处未引用该命名空间。
您不会在头文件中收到错误消息,因为声明包含在namespace CLI { }
块中,而 cpp 文件没有该消息。
为了解决这个问题,我建议您将 cpp 文件中的所有代码包含在namespace CLI { }
块中,并从各种声明中删除CLI::
。我认为这看起来比另一个解决方案更干净,即完全限定返回类型(CLI::Person^
)。
相关文章:
- 如何在模板参数中分离函数类型返回类型和参数
- 为什么要为指针返回类型返回一系列字符?
- 有没有办法根据运行时值的类型返回 constexpr 对象
- 从弱指针返回类型返回共享指针
- 无法为unique_ptr返回类型返回 nullptr
- 为什么双重类型返回无穷大
- std::is_arithmetic 为通用 lambda 中的 int 类型返回 false:未定义的行为?
- C 策略设计具有可变类型返回值
- 根据类型返回一个值
- 在C++中,将double转换为long的类型返回了不正确的值
- 作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id
- 具有引用类型返回的函数
- C++ 如何使模板<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr
- C++模板:按类型返回值
- 以Integer返回类型返回浮点值
- 使用 C++14 的自动功能类型返回扣除代替 std::common_type 是否始终安全?
- 为什么允许新运算符向每个指针类型返回*void
- 适当的函数返回类型返回日期时间
- c++中布尔类型返回函数的默认返回值
- 在c#中使用非托管c++代码对所有double类型返回0