C ++ / CX无法在类中使用字符串变量

时间:2015-03-19 17:37:12

标签: c++-cx

我目前正在用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;
};

2 个答案:

答案 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;
};