Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
1 / 1 / 1
Регистрация: 27.12.2013
Сообщений: 94
1

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

27.05.2014, 00:02. Показов 8722. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую!
Слабое знание английского не помогло мне найти ответа на 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
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2014, 00:02
Ответы с готовыми решениями:

Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier
Решил подправить свой класс с использованием шаблонов, но столкнулся со следующим косяком. Если я...

'MyQueue' : use of class template requires template argument list
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки...

Ошибка: error C2783: 'T __cdecl sumF(void)' : could not deduce template argument for 'T'
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int a; template&lt; typename T &gt; T...

Ошибка "invalid argument type 'DinMass' to unary expression"
подскажите что ошибка означает и как исправить? File1.cpp(152): invalid argument type 'DinMass' to...

7
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2014, 00:31 2
Что в файле TStudent.h?
0
1 / 1 / 1
Регистрация: 27.12.2013
Сообщений: 94
27.05.2014, 00:44  [ТС] 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
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2014, 00:52 4
Лучший ответ Сообщение было отмечено Battle_Hamster как решение

Решение

Попробуйте так:
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
1
1 / 1 / 1
Регистрация: 27.12.2013
Сообщений: 94
27.05.2014, 00:58  [ТС] 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
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2014, 01:04 6
Цитата Сообщение от Battle_Hamster Посмотреть сообщение
Программа потом будет правильно находить пути к классам?
Будет.
Цитата Сообщение от Battle_Hamster Посмотреть сообщение
И почему такой метод помог, а добавление заголовочных файлов - нет?
У вас, в TStudent.h и в TWyklad.h взаимное включение, из-за этого ошибка. Если в хедере только указатели на класс, то достаточно форвард-объяления класса (без инклуда хедера с классом).
Цитата Сообщение от Battle_Hamster Посмотреть сообщение
Спрашиваю, потому что есть ещё один класс, использующий вектор TStudent, и там при добавлении заголовочного ошибки не было,
А тут взаимного включения нет (в TStudent.h нет инклуда TUczlenia.h).
1
1 / 1 / 1
Регистрация: 27.12.2013
Сообщений: 94
27.05.2014, 01:35  [ТС] 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 минуту
отбой тревоги, забыла написать класс перед добавленным функциями =_=
*кажется пора спать*
0
1 / 1 / 1
Регистрация: 27.12.2013
Сообщений: 94
27.05.2014, 01:39  [ТС] 8
alsav22, Спасибо Вам за помощь
Лучи добра плюсы в карму от меня
0
27.05.2014, 01:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2014, 01:39
Помогаю со студенческими работами здесь

Friend template class with template class argument
Помогите подружить 2 класса: Имеется класс Student: template &lt;class _T&gt; class Faculty; class...

ошибка в коде "Invalid argument "
Привет все мне дали задание создать библиотеку для комплексных чисел вот начал делать и столкнулся...

template argument deduction/substitution failed
Здравствуйте! template &lt;class T&gt; struct A { struct B { }; };

Error: '>>' should be '>>' within a nested template argument list
кто знает че за ошибка, как с ней бороться? 000615.cpp: In function 'int main()':

argument list for class template is missing
Сделал очередь через односвязный список для интовых значений(все работало), хотел использовать её...

Шаблоны: ошибки: requires template argument list или undeclared identifier
Есть маленький тестовый проект из 4-файлов. Что мне надо - рассказывать словами замучаюсь,...

invalid stoi argument
Начал писать программу,которая предлагает пользователю ввести день,месяц,год.Месяц может быть...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru