具有预定大小的 C++ 向量抛出编译错误
C++ Vectors with pre-determined size throwing compile errors
我是 C++ 的新手,正在尝试创建一个简单的 Student
class,其中包含 int
.
类型的向量
这是我的 class:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <sstream>
using namespace std;
class Student {
string last;
string first;
vector<int> scores(10);
public:
Student():last(""), first("") {}
Student(string l, string f) {
last = l;
first = f;
}
~Student() {
last = "";
first = "";
}
Student(Student& s) {
last = s.last;
first = s.first;
scores = s.scores;
}
Student& operator = (Student& s) {
last = s.last;
first = s.first;
scores = s.scores;
return *this;
}
void addScore(int n) {
scores.push_back(n);
}
};
出于某种原因,我在引用向量 scores
时得到多个 reference to non-static member function must be called; did you mean to call it with no arguments
。
这是我的完整错误列表:
main.cpp:15:22: error: expected parameter declarator
vector<int> scores(10);
main.cpp:15:22: error: expected ')'
main.cpp:15:21: note: to match this '('
vector<int> scores(10);
main.cpp:30:4: error: reference to non-static member function must be called; did you mean to call it with no arguments?
scores = s.scores;
main.cpp:35:4: error: reference to non-static member function must be called; did you mean to call it with no arguments?
scores = s.scores;
main.cpp:35:15: error: reference to non-static member function must be called; did you mean to call it with no arguments?
scores = s.scores;
main.cpp:40:4: error: reference to non-static member function must be called; did you mean to call it with no arguments?
scores.push_back(n);
我已经尝试了很多东西,但仍然不知道这些错误是从哪里来的。我是 C++ 的新手,所以请原谅我。任何帮助将不胜感激。
您不能像这样初始化数据成员:
vector<int> scores(10);
您需要以下表格之一:
vector<int> scores = vector<int>(10);
vector<int> scores = vector<int>{10};
vector<int> scores{vector<int>(10)};
原因是为了避免看起来像函数声明的初始化。请注意,这在语法上是有效的:
vector<int>{10};
但它将向量初始化为大小 1,单个元素的值为 10。
您不能在 class 的成员定义中调用构造函数;你需要从初始化列表中调用它:
class Student {
string last;
string first;
vector<int> scores;
public:
Student():last(""), first(""), scores(10) {}
编辑至少这是 c++11 之前的方式...
对于这种情况,您应该使用初始化列表:
Student():scores(10) {}
如果您在代码中接下来使用 push_back(),那么创建包含 10 个元素的向量的原因是什么?
void addScore(int n) {
scores.push_back(n);
}
此代码将第 11 个元素添加到向量中。这对您的项目来说是正确的行为吗?
我是 C++ 的新手,正在尝试创建一个简单的 Student
class,其中包含 int
.
这是我的 class:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <sstream>
using namespace std;
class Student {
string last;
string first;
vector<int> scores(10);
public:
Student():last(""), first("") {}
Student(string l, string f) {
last = l;
first = f;
}
~Student() {
last = "";
first = "";
}
Student(Student& s) {
last = s.last;
first = s.first;
scores = s.scores;
}
Student& operator = (Student& s) {
last = s.last;
first = s.first;
scores = s.scores;
return *this;
}
void addScore(int n) {
scores.push_back(n);
}
};
出于某种原因,我在引用向量 scores
时得到多个 reference to non-static member function must be called; did you mean to call it with no arguments
。
这是我的完整错误列表:
main.cpp:15:22: error: expected parameter declarator
vector<int> scores(10);
main.cpp:15:22: error: expected ')'
main.cpp:15:21: note: to match this '('
vector<int> scores(10);
main.cpp:30:4: error: reference to non-static member function must be called; did you mean to call it with no arguments?
scores = s.scores;
main.cpp:35:4: error: reference to non-static member function must be called; did you mean to call it with no arguments?
scores = s.scores;
main.cpp:35:15: error: reference to non-static member function must be called; did you mean to call it with no arguments?
scores = s.scores;
main.cpp:40:4: error: reference to non-static member function must be called; did you mean to call it with no arguments?
scores.push_back(n);
我已经尝试了很多东西,但仍然不知道这些错误是从哪里来的。我是 C++ 的新手,所以请原谅我。任何帮助将不胜感激。
您不能像这样初始化数据成员:
vector<int> scores(10);
您需要以下表格之一:
vector<int> scores = vector<int>(10);
vector<int> scores = vector<int>{10};
vector<int> scores{vector<int>(10)};
原因是为了避免看起来像函数声明的初始化。请注意,这在语法上是有效的:
vector<int>{10};
但它将向量初始化为大小 1,单个元素的值为 10。
您不能在 class 的成员定义中调用构造函数;你需要从初始化列表中调用它:
class Student {
string last;
string first;
vector<int> scores;
public:
Student():last(""), first(""), scores(10) {}
编辑至少这是 c++11 之前的方式...
对于这种情况,您应该使用初始化列表:
Student():scores(10) {}
如果您在代码中接下来使用 push_back(),那么创建包含 10 个元素的向量的原因是什么?
void addScore(int n) {
scores.push_back(n);
}
此代码将第 11 个元素添加到向量中。这对您的项目来说是正确的行为吗?