【问题标题】:c++ Allocating memory for a classc ++为类分配内存
【发布时间】:2026-01-18 16:00:01
【问题描述】:

我有这门课:

class myClass{
    public:
        myClass(string label);
        ~myClass();
        string myget();
        void myset(string label);

        void myadd(class2 * edge);
    private:
        string label;
        vector<class2 *> myList;
};

我想写一个函数来检查 myClass 类型的对象是否相等:

 bool operator== (myClass& l,myClass& r)
{         

}

为了检查这些对象的 myList 向量,我想复制 l 和 r,对副本的向量进行排序,并检查这些副本的排序向量是否相等。但我认为我未能复制 l 和 r。这是我为此写的:

myClass x = new myClass("s1");
myClass y = new myClass("s2");


x = l;
y = r;
sort(x.myList.begin(),x.myList.end());
sort(y.myList.begin(),y.myList.end())
if( x == y)
    return true;
    else
    return false;

此代码给出此错误:错误:请求从“myClass*”转换为非标量类型“myClass”。

我尝试制作 x 和 y 指针,但也没有用。您能告诉我如何修复此代码吗?

提前致谢。

【问题讨论】:

  • “我尝试制作 x 和 y 指针,但没有用”“没有用”是什么意思?
  • 转换运算符应该接受const&amp;
  • @DrewDormann myClass* x = new myClass("s1"); myClass* y = new myClass("s2"); 这导致函数的其他部分出现另一个错误

标签: c++ class pointers


【解决方案1】:
myClass x = new myClass("s1"); - here is the problem

运算符new 返回一个指针。所以你要么存储一个指针,要么只是在自动存储上创建你的副本(通常引用为堆栈)

myClass x = myClass("s1"); - should be so (stack)
myClass *x = new myClass("s1"); - or so (heap)

【讨论】:

    【解决方案2】:

    您是否忘记将 x 和 y 声明为指针?

    myClass* x = new myClass("s1");
    myClass* y = new myClass("s2");
    

    【讨论】:

      【解决方案3】:

      假设您只需要课程在课程期间“生活”,您可以这样做:

        myClass x("s1");
      

      或者

        myClass x = myClass("s1");
      

      如果你需要一个指向类的指针,这样这个函数就可以把它传回一个调用函数:

        myClass *x = new myClass("s1");
      

      【讨论】: