Der Code sollte jetzt so aussehen, oder?
|
C-/C++-Quelltext
|
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#include "LB1.hpp"
#include <algorithm> // std::copy
#include <vector> // std::vector
#include <string> // std::string, std::getline
#include <istream> // std::istream
#include <sstream> // std::istringstream
#include <iterator> // std::ostream_iterator, std::istream_iterator
#include <fstream>
#include <iostream>
template<typename T, const char it = ';'>
struct help_stream_iterator
{
public:
friend std::istream& operator>>(std::istream& in, help_stream_iterator & obj)
{
std::string tmp;
if (!std::getline(in, tmp, it)){ in.setstate(std::ios_base::failbit); return in; }
std::istringstream ss(tmp);
ss >> obj.m_data;
if (!ss) in.setstate(std::ios_base::failbit);
return in;
}
friend std::ostream& operator<<(std::ostream& out, const help_stream_iterator & obj)
{
out << obj.data();
return out;
}
public:
T const& data() const { return m_data; }
private:
T m_data;
};
void LB1L1()
{
std::ifstream file_stream("Data\\questionLB1L1.qst");
std::vector<std::string> questions;
std::string temp_line;
while (std::getline(file_stream, temp_line)) questions.push_back(temp_line);
file_stream.close();
file_stream.clear();
file_stream.open("Data\\answerLB1L1.qst");
std::vector <help_stream_iterator> answers;
std::copy(std::istream_iterator<help_stream_iterator<std::string> >(file_stream), std::istream_iterator<help_stream_iterator <std::string> >(), std::back_inserter( answers) );
file_stream.close();
std::srand(static_cast<unsigned int>(std::time(0)));
bool close = false;
while (close == false)
{
std::cout << "\t (0) Neue Frage\n"
<< "\t (1) Zurueck" << std::endl;
std::cout << "\t";
while (!(std::cin >> close)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
if (close == false)
{
std::cout << "\n";
std::size_t pos = std::rand() % std::min(questions.size(), answers.size());
std::cout << "\t";
std::cout << questions.at(pos) << std::endl;
std::string answer;
std::cout << "\t";
std::cin >> answer;
std::cout << "\n" << "\t";
std::cout << "Die Antwort ist " << (answers.at(pos) == answer ? "richtig!" : "falsch!") << std::endl;
std::cout << "\n\n";
}
}
}
|
Aber es kommen folgene Fehler:
Compiler: Default compiler
Building Makefile: "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Projekt 1\Makefile.win"
Führt make... aus
make.exe -f "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Projekt 1\Makefile.win" all
g++.exe -c LB1L1.cpp -o LB1L1.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
LB1L1.cpp: In function `void LB1L1()':
LB1L1.cpp:48: error: type/value mismatch at argument 1 in template parameter list for `template<class _Tp, class _Alloc> class std::vector'
LB1L1.cpp:48: error: expected a type, got `help_stream_iterator'
LB1L1.cpp:48: error: template argument 2 is invalid
LB1L1.cpp:48: error: invalid type in declaration before ';' token
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h: At global scope:
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h: In instantiation of `std::back_insert_iterator<int>':
LB1L1.cpp:49: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:363: error: `int' is not a class, struct, or union type
LB1L1.cpp: In function `void LB1L1()':
LB1L1.cpp:64: error: `size' has not been declared
LB1L1.cpp:64: error: request for member of non-aggregate type before '(' token
LB1L1.cpp:71: error: `at' has not been declared
LB1L1.cpp:71: error: request for member of non-aggregate type before '(' token
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algobase.h: In function `_OutputIterator std::__copy(_InputIterator, _InputIterator, _OutputIterator, std::input_iterator_tag) [with _InputIterator = std::istream_iterator<help_stream_iterator<std::string, ';'>, char, std::char_traits<char>, ptrdiff_t>, _OutputIterator = std::back_insert_iterator<int>]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algobase.h:266: instantiated from `_OutputIterator std::__copy_aux2(_InputIterator, _InputIterator, _OutputIterator, __false_type) [with _InputIterator = std::istream_iterator<help_stream_iterator<std::string, ';'>, char, std::char_traits<char>, ptrdiff_t>, _OutputIterator = std::back_insert_iterator<int>]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algobase.h:308: instantiated from `_OutputIterator std::__copy_ni2(_InputIterator, _InputIterator, _OutputIterator, __false_type) [with _InputIterator = std::istream_iterator<help_stream_iterator<std::string, ';'>, char, std::char_traits<char>, ptrdiff_t>, _OutputIterator = std::back_insert_iterator<int>]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algobase.h:327: instantiated from `_OutputIterator std::__copy_ni1(_InputIterator, _InputIterator, _OutputIterator, __false_type) [with _InputIterator = std::istream_iterator<help_stream_iterator<std::string, ';'>, char, std::char_traits<char>, ptrdiff_t>, _OutputIterator = std::back_insert_iterator<int>]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algobase.h:358: instantiated from `_OutputIterator std::copy(_InputIterator, _InputIterator, _OutputIterator) [with _InputIterator = std::istream_iterator<help_stream_iterator<std::string, ';'>, char, std::char_traits<char>, ptrdiff_t>, _OutputIterator = std::back_insert_iterator<int>]'
LB1L1.cpp:49: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algobase.h:234: error: no match for 'operator=' in '(&__result)->std::back_insert_iterator<_Container>::operator* [with _Container = int]() = (&__first)->std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::operator* [with _Tp = help_stream_iterator<std::string, ';'>, _CharT = char, _Traits = std::char_traits<char>, _Dist = ptrdiff_t]()'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_iterator.h:338: note: candidates are: std::back_insert_iterator<int>& std::back_insert_iterator<int>::operator=(const std::back_insert_iterator<int>&)
make.exe: *** [LB1L1.o] Error 1
Ausführung beendet