我目前正在用C ++ / CX编写一个类,我正在尝试为该类创建一些字符串变量。但是由于某些原因,它显示出此错误(见下文):
任何人都可以请注意为什么它这样做真的很烦人,我尝试了一些东西!请参阅下面的课程代码:
#pragma once
#include <string>
ref class Plane
{
public:
Plane();
double getSpeed();
std::string getPlaneId();
double getFuelLevel();
std::string getLastStatus();
int getLastContactTime();
bool saveData();
std::string latitude;
std::string longitude;
private:
double speed;
std::string planeId;
double fuelLevel;
std::string lastStatus;
int lastContactTime;
};
答案 0 :(得分:1)
如果您正在编写C ++,请删除ref
并开始使用C ++编译器。
如果您正在编写C ++ / CX(an extension to C++),则不能在托管(ref)类中使用std::string
,因为std::string
是非托管类型,托管类不能包含非托管类类型的成员。这就是错误信息所说的内容。
答案 1 :(得分:0)
C ++ / CX的一个规则是你不能拥有公开暴露的非引用类。 https://msdn.microsoft.com/en-us/library/windows/apps/hh969551.aspx
如果您需要公开公开字符串,那么您可以使用Platform::String^
代替std::string
(在两者之间轻松转换)。
#pragma once
#include <string>
ref class Plane
{
public:
Plane();
double getSpeed();
Platform::String^ getPlaneId();
double getFuelLevel();
Platform::String^ getLastStatus();
int getLastContactTime();
bool saveData();
Platform::String^ latitude;
Platform::String^ longitude;
private:
double speed;
std::string planeId;
double fuelLevel;
std::string lastStatus;
int lastContactTime;
};
如果您只需要从非C ++ / CX代码访问std::string
,那么您可以使用internal
范围。
#pragma once
#include <string>
ref class Plane
{
public:
Plane();
// it's okay to have simple types in the public signature
double getSpeed();
double getFuelLevel();
int getLastContactTime();
bool saveData();
internal:
std::string getPlaneId();
std::string getLastStatus();
std::string latitude;
std::string longitude;
private:
double speed;
std::string planeId;
double fuelLevel;
std::string lastStatus;
int lastContactTime;
};