Member 14982907 Ответов: 3

Это код ++ на структурах, но он не будет работать, и я не знаю почему


#include <iostream>
#include <vector>
using namespace std;

      struct CD_TYPE
      {
          string title, artist;
          int year;
          double cost;
      } ;

    void printData(struct <CD_TYPE> &collection[]); 
    
int main()
   {
       vector <CD_TYPE> collection(2);
       collection[0].title ="That's All Folks";
       collection[0].artist = "Porky Pig";
       collection[0].year = 2000;
       collection[0].cost = 12.95;
       collection[1].title ="I Thought I Saw A Putty Cat";
       collection[1].artist = "Tweety Bird";
       collection[1].year = 2001;
       collection[1].cost = 14.50;
       printData(collection);
   }   
   
void printData(struct <CD_TYPE> &collection[])
    {
        for (int i = 0; i < 5; i++)// loops are always or normally used to Print the data
        {
        cout<<collection[i].title<<"\n"<< collection[i].artist<<"\n"<<collection[i].year<<"\n"<<collection[i].cost<<endl;
        }
    }


Что я уже пробовал:

Я попытался решить эту проблему, удалив функцию, и код тогда работает, но мне нужно, чтобы этот код имел функцию, но по какой-то причине возникла ошибка с моим прототипом или что-то в этом роде. Помощь была бы очень признательна, так как это итоговое задание, спасибо.

мое объяснение
По какой-то причине мой код не работает, и есть 5 ошибок, которые все связаны с

функции моего кода. Я считаю, что я не правильно передал функцию из main или что я этого не сделал

прототипируйте их правильно.

Ошибки:
main.cpp:11:16: ошибка: переменная или поле ‘printData’ объявлено недействительным
void printData(struct <cd_type> &collection[]);
основным^.КПП:11:16: ошибка: ожидается первичное-выражение до ‘структура’
main.cpp: в функции ‘int main()’:
main.cpp:24:25: error: ‘printData’ не был объявлен в этой области
printData(коллекция);
^ main.cpp: в глобальном масштабе:
main.cpp:27:16: error: переменная или поле ‘printData’ объявлено недействительным
void printData(struct <cd_type> &collection[])
основным^.ЧГК:27:16: ошибка: ожидается первичное-выражение до ‘структура’

3 Ответов

Рейтинг:
25

Richard MacCutchan

Вы пытаетесь передать векторную ссылку на printData функция, поэтому вы должны использовать правильное объявление:

void printData(vector<CD_TYPE>& collection);

Также в вашем printData функция вы пытаетесь напечатать 5 записей, но collection содержит только 2. Вы должны использовать вектор length свойство, чтобы узнать, сколько элементов оно содержит. Вероятно, вы могли бы обойтись и без вектора, поскольку используете его только как простой массив.


CPallini

5.

Member 14982907

Большое вам спасибо, вы смогли решить проблему с прототипированием моей функции, и теперь я могу представить свое задание.

Richard MacCutchan

Добро пожаловать.

Рейтинг:
2

Joe Woodbury

В дополнение к решению Ричарда, я бы:

1) Сделайте коллекцию const.

void printData(const vector<CD_TYPE>& collection);
2) Повторите сбор с помощью:
for (const auto& item : collection)
3) Добавить
void print() const
способ получения CD_TYPE.

4) Используйте неподписанный для cost и храните его в центах (я бы назвал имя участника costInCents) чтобы избежать проблем с плавающей точкой и деньгами.


CPallini

5.

Рейтинг:
1

CPallini

Вы также можете перегрузить оператор вставки << для того чтобы пройти сразу CD_TYPE возражает против cout- Я мог бы показать вам эту технику... И я собираюсь это показать, даже если ... не делайте их домашнюю работу- полиция все еще здесь. :-)

#include <iostream>
#include <vector>
using namespace std;

struct CD_TYPE
{
  string title, artist;
  int year;
  double cost;
};

ostream & operator << ( ostream & os, const CD_TYPE & cd)
{
  os << cd.title << "\n" << cd.artist << "\n" << cd.year << "\n" << cd.cost;
  return os;
}

ostream & operator << ( ostream & os, const vector< CD_TYPE> & vcd)
{
  for (auto cd : vcd)
    os << cd << "\n";
  return os;
}

int main()
{
  vector <CD_TYPE> collection(2);
  collection[0].title ="That's All Folks";
  collection[0].artist = "Porky Pig";
  collection[0].year = 2000;
  collection[0].cost = 12.95;
  collection[1].title ="I Thought I Saw A Putty Cat";
  collection[1].artist = "Tweety Bird";
  collection[1].year = 2001;
  collection[1].cost = 14.50;

  cout << collection << endl;
 }


Joe Woodbury

Гораздо лучше.