Возникла проблема с кодом, не знаю, как ее решить. Пишет, что нельзя указывать тип возвращаемого значения для конструктора. На всякий случай сообщу, что мне необходимо, чтоб оно мониторило book[1] на поиск слова "Program" и в случае, если найдет, выводило дату и автора (book[2],book[3]).
#include <iostream>
#include <string>
using namespace std;
class Book{
private:
string book[3][16];
public:
Book();
void founder() {};
}
Book::Book() {
string book[3][16] = {
{"Program","Program","Something","Noting","","Program","Noting","Something","Something","Anything","Program","Noting","Noting","Something","Noting","Program"},
{"12.03.2004","12.03.2009","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003"},
{"Jack","Jack","George","George","George","George","Jack","George","George","George","Jack","George","George","Jack","George","Jack"}
};
};
void Book::founder() {
int i;
for(i = 1; i <= 16; i++) {
if (book[1][i] == "Program"){cout << "Date: " << book[2][i] << "Autor: " << book[3][i] << endl; };
};
};
void main() {
Book b;
b.founder();
}
Если ваш код в точности такой, то по сути у вас написано
class Book {...} Book::Book(){}
Т.е. объявлен конструктор, возвращающий этот самый class Book
. А конструктор ничего возвращать не должен... Итак, нужна точка с запятой после объявления класса.
После этого компилятор совершенно справедливо поясняет, что book
в конструкторе скрывает имя book
в классе - т.е. то, что вы написали в конструкторе
Book::Book() {
string book[3][16] = {
не имеет никакого отношения к полю book
в классе, которое так и остается не инициализированным.
Исправляем -
Book::Book():book{
{"Program","Program","Something","Noting","","Program","Noting","Something","Something","Anything","Program","Noting","Noting","Something","Noting","Program"},
{"12.03.2004","12.03.2009","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003","12.03.2003"},
{"Jack","Jack","George","George","George","George","Jack","George","George","George","Jack","George","George","Jack","George","Jack"}
}
{
};
Теперь выползает очередная ошибка - что ваша void Book::founder()
уже имеет текст реализации - и в самом деле, ведь в классе вы ее не просто объявили, а определили, как имеющую пустое тело. А теперь - непустое. Компилятор на ruSO не участвует, понимать, что программист хотел, не умеет. Исправляем и эту ошибку, убирая {}
у функции в объявлении класса.
Теперь компилятору не нравится void
у main()
- и его можно понять: стандарт ведь требует int
.
И вот только после этого код компилируется.
Но, скорее всего, не работает (хотя, может, вы хотели именно этого - пишете же, что "мониторить book[1]
надо, т.е. искать "Program"
среди дат...). Хотя бы потому, что все элементы массивов нумеруются с 0, так что вы благополучно опускаете первый элемент, а в цикле выходите за пределы массива. И сравниваете, кстати, вторую строку массива book
, с датами...
И только переписав цикл как
for(int i = 0; i < 16; i++) {
if (book[0][i] == "Program")
cout << "Date: " << book[1][i] << " Autor: " << book[2][i] << endl;
};
мы получим какой-то вывод.
Итак, у вас как минимум 4 ошибки. Причем о трех из них, которые мешали компиляции, компилятор сообщал вполне доступным языком...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Подскажите пожалуйста, как отрисовать спрайт, с использованием потоков в SFML?