Visual Studio 2010上的C ++:无法将字符串分配给字符串(不支持混合类型)

时间:2016-07-14 18:33:43

标签: c++ string visual-studio-2010 assign managed

我正在尝试做一些非常简单的事情...在类中声明一个字符串,然后将其分配给类构造函数中定义的另一个字符串的值。

我正在为非托管类使用托管包装器“Unmanaged”(使用托管包装器,因为我想在C#程序中使用它,我使用的是非托管的,并且其.sln文件不在我的控制权)

如您所见,我尝试了尽可能多的字符串标题。

#pragma once
#include <string>
#include <string.h>
#include <cstring>
#include <iostream>
using namespace std;
using namespace System;
using std::string;

namespace UnmanagedWrap {

    public ref class Class1
    {
        // TODO: Add your methods for this class here.
    public:
        Unmanaged *pu; //pointer to the Unmanaged class
        //the constructor will allocate the pointer pu
        int a;
        int b;
        std::string filePath; //try CString() when get back
        Class1(int a_In, int b_In, std::string filePath_In) : pu(new Unmanaged()) { //constructor
            a = a_In;
            b = b_In;
            filePath = filePath_In; //trying to assign filePath to the inputted filePath_In.......
            }; //end of constructor

这给了我2个错误:

第一个涉及行std::string filePath;

1>c:\users\ngrace\documents\visual studio 2010\projects\unmanagedwrap\unmanagedwrap\UnmanagedWrap.h(21): error C4368: cannot define 'filePath' as a member of managed 'UnmanagedWrap::Class1': mixed types are not supported

第二个与行filePath = filePath_In;

有关
1>c:\users\ngrace\documents\visual studio 2010\projects\unmanagedwrap\unmanagedwrap\UnmanagedWrap.h(25): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion)

我很遗失,因为我花了几个小时寻找答案......

我去寻求帮助的一些页面:

Including headers from an unmanaged C++ code inside C++/CLI code

Mixed types are not supported

(我会发布更多信息,但我需要至少10名才能这样做....)

关于我为什么会收到这些错误的任何想法?

2 个答案:

答案 0 :(得分:1)

使用来自Bo Persson和user2666293的信息,我被引导尝试了一些东西,最终得到了答案。

您必须对托管字符串使用 System :: String ^ 类型。如果使用托管字符串并将其传递给非托管类中的方法,则必须将其转换为非托管字符串类型!

假设我们在非托管类中使用非托管字符串类型 std :: string

System :: String ^ std:string 的转换必须使用以下方式完成:

#include <msclr/marshal_cppstd.h>

并在顶部的头文件引用:

min-width: auto

其中 managedString 的类型为System :: String ^

:)

答案 1 :(得分:0)

https://msdn.microsoft.com/en-us/library/hh699870.aspx在子弹2中说,如果ref classes类不公开,它们只能有标准的c ++类型。尝试使用常规类或将filePath设为私有。

编辑: 我不熟悉托管类,但您可能会尝试使用Platform :: string而不是std :: string:https://msdn.microsoft.com/en-us/library/hh755812.aspx

https://msdn.microsoft.com/en-us/library/hh699879.aspx 说当你在Windows运行时类中的方法来回传递字符串时,或者当你与其他Windows运行时组件交互时使用平台字符串