EDIT: Вам необходимо сделать такой же вектор:Использование функции члена класса в векторе
vector myVector (5);
не нравится:
вектор myVector [5];
EDIT: Вам необходимо сделать такой же вектор:Использование функции члена класса в векторе
vector myVector (5);
не нравится:
вектор myVector [5];
Вместо vector<team> players[5];
vector<team> players(5);
должно быть. С помощью этой операции вы создадите вектор из 5 игроков. В вашем коде создаются 5 пустых векторов.
На самом деле вы должны получить гораздо больше ошибок. Я получаю следующее:
cl /nologo /EHsc /Za /W4 stackoverflow.cpp
stackoverflow.cpp
stackoverflow.cpp(5) : error C2146: syntax error : missing ';' before identifier 'name'
stackoverflow.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
stackoverflow.cpp(9) : error C2061: syntax error : identifier 'string'
stackoverflow.cpp(10) : error C2146: syntax error : missing ';' before identifier 'getName'
stackoverflow.cpp(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
stackoverflow.cpp(10) : warning C4183: 'getName': missing return type; assumed to be a member function returning 'int'
stackoverflow.cpp(22) : error C2511: 'void team::setName(std::string)' : overloaded member function not found in 'team'
stackoverflow.cpp(3) : see declaration of 'team'
stackoverflow.cpp(23) : error C2065: 'name' : undeclared identifier
stackoverflow.cpp(23) : error C2065: 'b' : undeclared identifier
stackoverflow.cpp(30) : error C2556: 'std::string team::getName(void)' : overloaded function differs only by return type from 'int team::getName(void
stackoverflow.cpp(10) : see declaration of 'team::getName'
stackoverflow.cpp(30) : error C2371: 'team::getName' : redefinition; different basic types
stackoverflow.cpp(10) : see declaration of 'team::getName'
stackoverflow.cpp(31) : error C2065: 'name' : undeclared identifier
stackoverflow.cpp(42) : error C2039: 'setRuns' : is not a member of 'std::vector<team,std::allocator<_Ty>>'
with
[
_Ty=team
]
stackoverflow.cpp(43) : error C2039: 'setName' : is not a member of 'std::vector<team,std::allocator<_Ty>>'
with
[
_Ty=team
]
stackoverflow.cpp(45) : error C2039: 'getName' : is not a member of 'std::vector<team,std::allocator<_Ty>>'
with
[
_Ty=team
]
stackoverflow.cpp(45) : error C2039: 'getRuns' : is not a member of 'std::vector<team,std::allocator<_Ty>>'
with
[
_Ty=team
]
имена классов стандартной библиотеки C++ начинаются с std::
. Это просто часть их имени. Хорошая практика - всегда использовать полное имя. В частности, очень плохой практикой является использование using namespace std;
в глобальной области видимости в файле заголовка.
Итак, давайте удалим using namespace std
и напишем std::
всюду.
team.h:
#include<string>
class team {
std::string name;
int runs;
public:
void setName(std::string a);
std::string getName();
void setRuns(int b);
int getRuns();
};
team.cpp:
#include<string>
#include "team.h"
void team::setRuns(int b) {
runs=b;
}
void team::setName(std::string a) {
name=b;
}
int team::getRuns() {
return runs;
}
std::string team::getName() {
return name;
}
main.cpp:
#include<iostream>
#include<vector>
#include<cstdio>
#include "team.h"
int main() {
std::vector<team> players[5];
players[0].setRuns(10);
players[0].setName("Michael");
printf("%s %d",players[0].getName(),players[0].getRuns());
system("pause");
return 0;
}
Это устраняет большинство ошибок:
stackoverflow.cpp(22) : error C2065: 'b' : undeclared identifier
stackoverflow.cpp(39) : error C2039: 'setRuns' : is not a member of 'std::vector<team,std::allocator<_Ty>>'
with
[
_Ty=team
]
stackoverflow.cpp(40) : error C2039: 'setName' : is not a member of 'std::vector<team,std::allocator<_Ty>>'
with
[
_Ty=team
]
stackoverflow.cpp(42) : error C2039: 'getName' : is not a member of 'std::vector<team,std::allocator<_Ty>>'
with
[
_Ty=team
]
stackoverflow.cpp(42) : error C2039: 'getRuns' : is not a member of 'std::vector<team,std::allocator<_Ty>>'
with
[
_Ty=team
]
a
в setRuns
, безусловно, опечатка. Мы также исправим это. Я также просто удалю ненужный system("pause");
. Теперь у нас есть код, который показывает только ошибка, о которой вы просили.
Давайте повнимательнее посмотрим на следующую строку:
std::vector<team> players[5]
Я думаю, что недоразумение в том, что [5]
определяет размер std::vector
. Это заблуждение. A std::vector
не имеет фиксированного размера и будет начинаться с 0 элементов по умолчанию. Для инициализации не требуется никакого синтаксиса []
. Синтаксис []
обозначает массив . Массив представляет собой набор элементов фиксированного размера.
Итак, вы создали здесь массив из 5 векторов. Видимо, это совсем не то, что вы хотели. Просто замените [5]
с (5)
, чтобы получить значение «вектора, который начинается с 5 элементов»:
std::vector<team> players(5);
Теперь он собирает.Но это, вероятно, аварии во время выполнения, потому что вы также можете использовать printf
неправильно:
printf("%s %d",players[0].getName(),players[0].getRuns());
printf
является функцией C, которая была разработана задолго до появления C++. %s
означает, что ожидается строка C-стиля. Вы могли обеспечить один такой:
printf("%s %d",players[0].getName().c_str(),players[0].getRuns());
Или вы просто использовать C++ потоки:
std::cout << players[0].getName() << " " << players[0].getRuns();
Что такое точное сообщение об ошибке, и (угадывания) вы компилировать main.cpp, а также команды .cpp? – Wintermute
Основная проблема заключается в том, что вы создаете массив векторов, а не один вектор. Вам также нужно вызвать 'string' по имени' std :: string' в 'team.h'. – juanchopanza