Search code examples
c++-cliclrunmanagedmanaged

&& : Cannot use this indirection on type '_Ty'


I want to convert std::list <std::string> to std::list<System::String^> and i get error that

&& : Cannot use this indirection on type '_Ty' with [ _Ty=System::String^ ]

Is it possible to convert ?

convert.h

#pragma once

#include <list> 
#include <string>
#include <msclr/marshal.h>
__declspec(dllimport) std::list<std::string> x_browseCan();


__declspec(dllexport) std::list<System::String^> wrap_browse_can();

convert.cpp

#include "pch.h"
#include "cok_main.h"
std::list<System::String^> wrap_browse_can() {
    std::list<std::string> temporary_list;
    std::list<System::String^> object_list;
    temporary_list = x_browseCan();
    for (std::list<std::string>::iterator it = temporary_list.begin(); it != temporary_list.end(); it++) {
        object_list.push_back(msclr::interop::marshal_as<System::String^>(*it));
    }
}

Solution

  • As mentioned by @madreflection i fixed my code as like below. List has to be System::Collections::Generic::List<System::String^>^ instead of std::list<System::String^>

    convert.cpp

    #include "pch.h"
    #include "cok_main.h"
    
    
    System::Collections::Generic::List<System::String^>^ wrap_browse_can() {
    
        std::list<std::string> temporary_list;
        System::Collections::Generic::List<System::String^>^  object_list;
        temporary_list = x_browseCan();
    
        for (std::list<std::string>::iterator it = temporary_list.begin(); it != temporary_list.end(); it++) {
    
            std::string asd = *it;
            System::String^ my_string = gcnew System::String(asd.c_str());
            object_list->Add(my_string);
            //object_list.push_back(msclr::interop::marshal_as<System::String^>(asd));
    
        }
        return object_list;
    
    }
    

    convert.h

    #pragma once
    
    #include <list> 
    #include <string>
    #include <msclr/marshal.h>
    __declspec(dllimport) std::list<std::string> x_browseCan();
    
    
    __declspec(dllexport) System::Collections::Generic::List<System::String^>^ wrap_browse_can();