Virheilmoituksia tulee noin pari ruudullista. Tässä alla on mielestäni tärkeimpiä.
rex03koe.cpp:24:26: required from here
/usr/include/c++/4.8/tuple:1090:70: error: no matching function for call to ‘dp::dp()’
second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
^
/usr/include/c++/4.8/tuple:1090:70: note: candidates are:
rex03koe.cpp:15:2: note: dp::dp(double, double)
dp::dp(const double a, const double b) : d1(a), d2(b) // dp-luokan muodostin
^
rex03koe.cpp:15:2: note: candidate expects 2 arguments, 0 provided
rex03koe.cpp:6:7: note: constexpr dp::dp(const dp&)
class dp // materialmap käyttää arvoina
^
rex03koe.cpp:6:7: note: candidate expects 1 argument, 0 provided
rex03koe.cpp:6:7: note: constexpr dp::dp(dp&&)
rex03koe.cpp:6:7: note: candidate expects 1 argument, 0 provided
Oletusmuodostin olisi mielestäni ensin esitelty luokassa ja sitten määritelty vähän alempana.
#include <iostream>
#include <string>
#include <map>
class dp // materialmap käyttää arvoina
{
public:
dp (const double a, const double b); // <--- oletusmuodostin
double d1;
double d2;
};
dp::dp(const double a, const double b) : d1(a), d2(b) // dp-luokan muodostin
{ ; } // <--- oletusmuodostin määritelty
std::map<std::string, dp> materialmap; // map
int main()
{
dp d(5, 6);
std::cout << d.d1 + d.d2 << std::endl;
//materialmap["tunniste1"] = d; // <--- TÄMÄ EI KÄÄNNY ???????
materialmap.insert(std::make_pair("tunniste1", d));
}
// g++ rex03koe.cpp -o rex03koe -Wall -pedantic -std=c++11
Käännöskomento on tässä viimeisellä rivillä.
Luokalle dp on siis mielestäni oletusmuodostin ja std::map ei kai sitä enää tarvinnekaam, se tullee valmiina luokan mukana?