C++/cli 错误 C4368:无法将“列表”定义为托管“队列”的成员:不支持混合类型

Posted

技术标签:

【中文标题】C++/cli 错误 C4368:无法将“列表”定义为托管“队列”的成员:不支持混合类型【英文标题】:C++/cli error C4368: cannot define 'list' as a member of managed 'queue': mixed types are not supported 【发布时间】:2016-08-31 23:05:13 【问题描述】:

我对 c++ Gui 完全陌生。 我正在尝试制作一个简单的窗口形式来借鉴我的餐饮哲学家信号量解决方案

我的信号量头文件

ref class sema4

 private:
  int sem_value;
  queue Waiting_List;
 public:
  sema4();
  void wait(HANDLE h);
  void signal();
;

我的信号量 cpp

sema4::sema4()

 sem_value=1;


//suspend the thread 
void sema4::wait(HANDLE h)

 sem_value = sem_value - 1;
 if (sem_value < 0)
  
    Waiting_List.enqueue(h);
    SuspendThread(h);
  


//Resume the thread
void sema4::signal()

  sem_value = sem_value + 1;
  if (sem_value <= 0)
   
    ResumeThread(Waiting_List.dequeue());
   

我的队列头文件

ref class queue

 private:
  HANDLE list[20];
  int front;
  int rear;

 public:
  queue();
  void enqueue(HANDLE x);
  HANDLE dequeue();
  bool isempty();
  bool isfull();
 ;

队列 CPP

queue::queue()

  front=-1;
  rear=-1;



void queue::enqueue(HANDLE x)

  if(isfull())
   
     cout<<"queue is full";
   
 else
  
    if(front==-1)
            front=0;

    rear=(rear+1)%20;
    list[rear]=x;
  
 


bool queue::isfull()
  if (front==(rear+1)%20)
        return true;
  return false;



HANDLE queue::dequeue()
  if(isempty())
   
      cout<<"queue is empty";
      return NULL;
   
  else
   
    HANDLE x =alist[front];
    if (front==rear)
        front=rear=-1;
    else front = (front + 1) % 20;
   
 

bool queue::isempty()

  if((front == rear) && (rear == -1))
  
    return true;
  
return false;

我不断收到错误 C4368:无法将“列表”定义为托管“队列”的成员:不支持混合类型 而且我没有使用 c++ windows 窗体的实际经验

【问题讨论】:

【参考方案1】:

简单的答案

您得到的编译错误是因为queue 是托管类型。托管类型需要使用^ 声明,并使用gcnew 创建。

更复杂的答案

您编写的不是 C++ 代码。这是一种称为 C++/CLI 的语言,旨在用于 .Net 托管语言(例如 C#)和非托管语言(例如 C 和 C++)之间的互操作。因此,它具有 C++ 的所有复杂性、C# 的所有复杂性,以及它自己的一些额外的复杂性。

当您刚刚学习时,请选择其中一个,然后继续。如果您想编写托管代码,请学习 C#。如果您想编写非托管代码,请学习 C++。不要在你还在学习的时候处理 C++/CLI。

【讨论】:

以上是关于C++/cli 错误 C4368:无法将“列表”定义为托管“队列”的成员:不支持混合类型的主要内容,如果未能解决你的问题,请参考以下文章

C++/CLI 管理的 VS。非托管空头

System::Collections::Generic::自定义类对象列表 c++/cli

无法将列表附加到现有文件。 C#

如何从 C# 访问 C++/CLI 中的类?

我无法安装 @angular/CLI 包

Elastic Beanstalk CLI Windows - 无法创建进程错误?