Форум программистов, компьютерный форум CyberForum.ru

Ошибка "template argument 1 is invalid" - C++

Восстановить пароль Регистрация
 
Battle_Hamster
 Аватар для Battle_Hamster
1 / 1 / 0
Регистрация: 27.12.2013
Сообщений: 90
27.05.2014, 00:02     Ошибка "template argument 1 is invalid" #1
Приветствую!
Слабое знание английского не помогло мне найти ответа на stackoverflow, поэтому надеюсь, что кто-нибудь может помочь

собсно код:

ошибка - 20 строка
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#if !defined(_TWYKLAD_H)
#define _TWYKLAD_H
 
#include <iostream>
#include<vector>
#include<TStudent.h>
using namespace std;
 
class TWyklad {
public:
    TWyklad(string nazwa, int idWykladu);
    void setNazwa(string nazwa);
    string getNazwa();
    void setIdWykladu(int idWykladu);
    int getIdWykladu();
private:
    string nazwa;
    int idWykladu;
    std::vector <TStudent*> studenci1;// powiazanie
};
 
#endif  //_TWYKLAD_H
текст ошибок:

D:\uniwersity\Inzeneria Oprogramowania\proekt_zaliczeniowy\cpp\QT_projekt\uczelnia\TWyklad.h:20: ошибка: 'TStudent' was not declared in this scope
std::vector <TStudent*> studenci1;// powiazanie
^
D:\uniwersity\Inzeneria Oprogramowania\proekt_zaliczeniowy\cpp\QT_projekt\uczelnia\TWyklad.h:20: ошибка: template argument 1 is invalid
std::vector <TStudent*> studenci1;// powiazanie
^
D:\uniwersity\Inzeneria Oprogramowania\proekt_zaliczeniowy\cpp\QT_projekt\uczelnia\TWyklad.h:20: ошибка: template argument 2 is invalid
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 00:02     Ошибка "template argument 1 is invalid"
Посмотрите здесь:

<Template>. Ошибка компиляции C++
C++ Ошибка: error C2783: 'T __cdecl sumF(void)' : could not deduce template argument for 'T'
C++ Template ошибка компляции
C++ ошибка в коде "Invalid argument "
C++ Template, в чем ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2014, 00:31     Ошибка "template argument 1 is invalid" #2
Что в файле TStudent.h?
Battle_Hamster
 Аватар для Battle_Hamster
1 / 1 / 0
Регистрация: 27.12.2013
Сообщений: 90
27.05.2014, 00:44  [ТС]     Ошибка "template argument 1 is invalid" #3
alsav22,
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#if !defined(_TSTUDENT_H)
#define _TSTUDENT_H
#include <iostream>
#include<vector>
#include<TWyklad.h>
using namespace std;
 
class TStudent {
public:
    TStudent(string nazwisko, int idStudenta);
    void setName(string nazwisko);
    string getName();
    void zapiszNaWyklad(TWyklad *newWyklad);
    const TWyklad* odzczytajWyklad(int id) const;
private:
    //  
    string nazwisko;
    int idStudenta;
   std::vector <TWyklad*> wyklady; // powiazanie
 
};
 
#endif  //_TSTUDENT_H
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2014, 00:52     Ошибка "template argument 1 is invalid" #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#if !defined(_TWYKLAD_H)
#define _TWYKLAD_H
#include <iostream>
#include<vector>
//#include<TStudent.h>
using namespace std;
 
class TStudent;
 
class TWyklad {
public:
    TWyklad(string nazwa, int idWykladu);
    void setNazwa(string nazwa);
    string getNazwa();
    void setIdWykladu(int idWykladu);
    int getIdWykladu();
private:
    string nazwa;
    int idWykladu;
    std::vector <TStudent*> studenci1;// powiazanie
};
 
#endif  //_TWYKLAD_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#if !defined(_TSTUDENT_H)
#define _TSTUDENT_H
#include <iostream>
#include<vector>
//#include<TWyklad.h>
using namespace std;
 
class TWyklad;
 
class TStudent {
public:
    TStudent(string nazwisko, int idStudenta);
    void setName(string nazwisko);
    string getName();
    void zapiszNaWyklad(TWyklad *newWyklad);
    const TWyklad* odzczytajWyklad(int id) const;
private:
    //  
    string nazwisko;
    int idStudenta;
   std::vector <TWyklad*> wyklady; // powiazanie
 
};
 
#endif  //_TSTUDENT_H
Battle_Hamster
 Аватар для Battle_Hamster
1 / 1 / 0
Регистрация: 27.12.2013
Сообщений: 90
27.05.2014, 00:58  [ТС]     Ошибка "template argument 1 is invalid" #5
alsav22,
работает! :)
спасибо :)

а можно глупый вопрос?
Программа потом будет правильно находить пути к классам?
И почему такой метод помог, а добавление заголовочных файлов - нет?
Спрашиваю, потому что есть ещё один класс, использующий вектор TStudent, и там при добавлении заголовочного ошибки не было, вот TUczlenia.h:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#if !defined(_TUCZELNIA_H)
#define _TUCZELNIA_H
 
#include <iostream>
#include<TStudent.h>
#include<vector>
 
using namespace std;
 
class TUczelnia {
public:
    void dodajStudenta(TStudent *student);
    void usunStudenta();
    void odczytajDaneStudenta(int id);
    void odczytajWszystkichStudentow();
    void dodajWydzial();
    void usunWydzial();
    void odczytajDaneWydzialu();
    void odczytajWszystkieWydzialy();
    TUczelnia(string name, string adres, int telefon);
    void setTelefon(int telefon);
    int getTelefon();
private:
    string name;
    string adres;
    int telefon;
 
  vector <TStudent*> studenci;// proste zagregowanie klasy TStudent z klasД… TUczelnia
};
 
#endif  //_TUCZELNIA_H
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2014, 01:04     Ошибка "template argument 1 is invalid" #6
Цитата Сообщение от Battle_Hamster Посмотреть сообщение
Программа потом будет правильно находить пути к классам?
Будет.
Цитата Сообщение от Battle_Hamster Посмотреть сообщение
И почему такой метод помог, а добавление заголовочных файлов - нет?
У вас, в TStudent.h и в TWyklad.h взаимное включение, из-за этого ошибка. Если в хедере только указатели на класс, то достаточно форвард-объяления класса (без инклуда хедера с классом).
Цитата Сообщение от Battle_Hamster Посмотреть сообщение
Спрашиваю, потому что есть ещё один класс, использующий вектор TStudent, и там при добавлении заголовочного ошибки не было,
А тут взаимного включения нет (в TStudent.h нет инклуда TUczlenia.h).
Battle_Hamster
 Аватар для Battle_Hamster
1 / 1 / 0
Регистрация: 27.12.2013
Сообщений: 90
27.05.2014, 01:35  [ТС]     Ошибка "template argument 1 is invalid" #7
alsav22,
ага. спасибо
только я по ходу ещё одну ошибку сделала, можете подсказать что поправить?

в Wyklad.h есть декларация вектора:
C++ (Qt)
1
 std::vector <TStudent*> studenci1;// powiazanie
а в Wyklad.cpp компилятор ругается, что такого вектора не существует:

C++ (Qt)
1
2
3
4
5
void dodajStudenta(TStudent * student)
{
    
    studenci1.push_back(student);
}
ошибка:
D:\uniwersity\Inzeneria Oprogramowania\proekt_zaliczeniowy\cpp\QT_projekt\uczelnia\TWyklad.cpp:33: ошибка: 'studenci1' was not declared in this scope
studenci1.push_back(student);

Добавлено через 1 минуту
весь Wyklad.cpp на всякий:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "TWyklad.h"
#include"TStudent.h"
TWyklad::TWyklad(string nazwa, int idWykladu) {
    this->nazwa=nazwa;
    this->idWykladu=idWykladu;
    cout<<"Konsruktor klasy TWyklad, utworzono obiekt klasy o nzawie: "<<this->nazwa<<endl;
 
}
 
void TWyklad::setNazwa(string nazwa) {
this->nazwa=nazwa;
 
}
 
string TWyklad::getNazwa() {
    return nazwa;
 
}
 
void TWyklad::setIdWykladu(int idWykladu) {
    this->idWykladu=idWykladu;
 
}
 
int TWyklad::getIdWykladu() {
 
    return idWykladu;
}
 
void dodajStudenta(TStudent * student)
{
 
    studenci1.push_back(student);
}
 
const TStudent* odczytajStudentow();
Добавлено через 21 минуту
отбой тревоги, забыла написать класс перед добавленным функциями =_=
*кажется пора спать*
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2014, 01:39     Ошибка "template argument 1 is invalid"
Еще ссылки по теме:

C++ Template argument required for class "LinkedListIterator"
Ошибка с template <class T> C++
C++ В чем различие template <typename T> от template <class T> ?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Battle_Hamster
 Аватар для Battle_Hamster
1 / 1 / 0
Регистрация: 27.12.2013
Сообщений: 90
27.05.2014, 01:39  [ТС]     Ошибка "template argument 1 is invalid" #8
alsav22, Спасибо Вам за помощь
Лучи добра плюсы в карму от меня
Yandex
Объявления
27.05.2014, 01:39     Ошибка "template argument 1 is invalid"
Ответ Создать тему
Опции темы

Текущее время: 12:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru