添加方法至C++/CLI子类时遭遇元数据错误求助
解决C++/CLI子类添加方法后的元数据错误问题
我之前也碰到过类似的C++/CLI元数据报错,这种问题大多是托管代码的语法细节没注意到,咱们对着你的代码一步步排查:
先把你的代码整理成更清晰的格式:
#pragma once #include "stdafx.h" #include "Osoba.h" #include "Lekarz.h" ref class Pacjent : public Osoba { public: Pacjent(String ^ imie, String ^ nazwisko, String ^ telefon, String ^ pesel) : Osoba(imie, nazwisko, telefon) { } bool appointVisit(DateTime^ date, Lekarz^ lekarz); protected: String ^ pesel; private: int getGender(); };
最有可能触发元数据错误的点是这里:
bool appointVisit(DateTime^ date, Lekarz^ lekarz);
在C++/CLI里,DateTime是值类型,不是托管引用类型,所以不能加^符号。正确的写法应该是:
bool appointVisit(DateTime date, Lekarz^ lekarz);
值类型直接使用本身即可,加^会让编译器对元数据的生成逻辑混乱,这是新手写C++/CLI时很容易踩的坑。
除此之外,还有几个需要确认的点:
- 你是否在对应的
.cpp文件里实现了appointVisit和getGender方法?只在头文件声明但不实现,虽然通常报链接错误,但在某些托管代码编译场景下也可能牵连到元数据生成。比如:// Pacjent.cpp bool Pacjent::appointVisit(DateTime date, Lekarz^ lekarz) { // 这里写你的业务逻辑 return true; } int Pacjent::getGender() { // 实现性别判断逻辑,比如基于pesel return 0; } - 检查
Osoba和Lekarz是否都是正确的ref class托管类。如果Osoba是原生C++类,那Pacjent作为托管类继承它是不允许的,不过你之前没加方法时正常,这个可能性相对低,但也可以确认下头文件里的声明。
先把DateTime^改成DateTime试试,这大概率能解决你的元数据错误。
内容的提问来源于stack exchange,提问作者Ethris
相关产品推荐
相关产品推荐

