重载operator = issue

时间:2011-12-04 15:19:08

标签: c++ overloading

我正在编写c ++程序。

这是主要方法的片段:

 Student * array = new Student[4];

    int i = 0;

    for(char x = 'a'; x < 'e'; x++){        

       array[i] = new Student(x+" Bill Gates");
        i++;
    }
    defaultObject.addition(array, 4);

此行array[i] = new Student(x+" Bill Gates");会抛出错误:

g++    -c -g -MMD -MP -MF build/Debug/Cygwin-Windows/Run.o.d -o build/Debug/Cygwin-Windows/Run.o Run.cpp
In file included from Run.cpp:12:
Assessment3.hpp:53:39: warning: no newline at end of file
Run.cpp: In function `int main(int, char**)':
Run.cpp:68: error: no match for 'operator=' in '*((+(((unsigned int)i) * 8u)) + array) = (string(((+((unsigned int)x)) + ((const char*)" Bill Gates")), ((const std::allocator<char>&)((const std::allocator<char>*)(&allocator<char>())))), (((Student*)operator new(8u)), (<anonymous>->Student::Student(<anonymous>), <anonymous>)))'
Student.hpp:19: note: candidates are: Student& Student::operator=(Student&)
make[2]: Leaving directory `/cygdrive/g/Aristotelis/C++/assessment3'
make[1]: Leaving directory `/cygdrive/g/Aristotelis/C++/assessment3'
make[2]: *** [build/Debug/Cygwin-Windows/Run.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 3s)

学生班在这里:

#include "Student.hpp"
#include <string>
using namespace std;

Student::Student(){
    in = "hooray";
}

Student::Student(string in) {
    this -> in = in;
}

Student::Student(const Student& orig) {
}

Student::~Student() {
}
Student & Student::operator=(Student & student){
    if(this != &student){
        this->in = student.in;
    }
    return *this;
}

头文件在这里:

#include <string>
using namespace std;

#ifndef STUDENT_HPP
#define STUDENT_HPP

class Student {
public:
    Student();
    Student(string in);
    Student(const Student& orig);
    virtual ~Student();
    Student & operator=(Student & student); // overloads = operator
private:
    string in;
};

#endif  /* STUDENT_HPP */

这部分程序创建了Student类型的数组,并存储了student类型的对象。传递数组以根据冒泡排序比较值。可能是什么问题?

2 个答案:

答案 0 :(得分:1)

'array'是在freestore上声明的学生数组,而不是指向学生的指针数组,因此您无法指定指向它们的指针,new返回指向freestore上新位置的指针。而是将学生分配到索引位置。

//no new, you are assigning to a memory block already on the 
array[i]=student("bob");

同时我在这里,你不能连接C字符串和类似的字符串。但是,您可以使用std :: string来完成繁重的工作。

char x='a';
std::string bill("bill gates");
std::string temp=bill+x;

最后,你将节省大量的时间,如果你是一个向量而不是一个C数组,一个向量将管理它自己的内存并提供一个供你使用的接口。

std::vector<student> array(4, student("Bill Gates"));

Vectors和string是在c ++中处理数组和字符串的事实方法。

答案 1 :(得分:0)

除了111111的回答......

代码x+" Bill Gates"正在尝试将char添加到char[],这是未定义的。 +运算符的至少一个操作数必须已经是一个字符串。您可能需要考虑使用x + string(" Bill Gates")