我正在编写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类型的对象。传递数组以根据冒泡排序比较值。可能是什么问题?
答案 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")
。