0

我有以下代码

ref class A
{

typedef ref struct All
{
 std::string x;
}All_t;

};

在我的程序中,我以下列方式使用它

A::All_t t;
t.X = "H";

此声明引发错误为

error C4368: cannot define 'x' as a member of managed 'A::All': mixed types are not supported

我知道我在托管代码中声明了本机变量,这是不允许的,但现在我想知道我需要进行哪些更改才能使我的结构适合托管项目。

谢谢。

4

1 回答 1

2

我假设您最初std::string x;没有std::string *x(因为使用指向字符串的指针不会产生该错误)。不允许将本机类型直接嵌入托管类型中,但可以间接拥有一个(通过指针)请参阅:

http://msdn.microsoft.com/en-us/library/xhfb39es(v=vs.80).aspx

在我修复了示例中的编译器错误后,它可以正确构建:

#include "stdafx.h"
#include <string>
using namespace System;

ref class A
{
public:
    typedef ref struct All
    {
        std::string * x;
    }All_t;

};

int main(array<System::String ^> ^args)
{
    A::All_t t;
    t.x = new std::string("H");

    return 0;
}
于 2013-05-23T15:01:24.077 回答