2014-10-29 2 views
-3

Когда я пытаюсь скомпилировать этот код я получаю эти ошибки:C++ Ошибка C2061: синтаксическая ошибка: идентификатор

Error 1 error C2061: syntax error : identifier 'stammdaten' 
Error 2 error C2660: 'Test_Lohnab::Gehaltsrechner' : function does not take 1 arguments 
Error 3 error C2511: 'int Test_Lohnab::Gehaltsrechner(stammdaten &)' : overloaded member function not found in 'Test_Lohnab'  

Это была бы большая помощь, если кто-то может объяснить мне, что я сделал неправильно.

Это мой код:

//Test_Lohnab.h 

#pragma once 

#include <iostream> 

#include <string> 



class Test_Lohnab 

{ 

public: 

    Test_Lohnab(); 

    ~Test_Lohnab(); 

    int Gehaltsrechner(stammdaten &st);//, abrechnung &ab); 
} 


class stammdaten 
{ 
public: 
    std::string name; 
    std::string strasse; 
    std::string ort; 
    …. 

    public: 
     stammdaten(); 
     ~stammdaten(); 

     stammdaten(std::string n, std::string s, std::string o, int st, int fa, int k, int a,  double z, double kver, double pk, int mi, int pv, int os, int ps, int ki, double geb, 
      double jf, double jh, int G_c, int G_a_c, int r_c, int A_L_c, double U_1, double U_2,  double bb_g); 
} 
//Test_Lohnab.cpp 

#include "Test_Lohnab.h" 

#include <iostream> 



Test_Lohnab::Test_Lohnab() 
{ 
} 



Test_Lohnab::~Test_Lohnab() 
{ 
} 



stammdaten::stammdaten() 
{ 
} 

stammdaten::stammdaten(std::string n, std::string s, std::string o, int st, int fa, int k, int a, double z, double kver, double pk, int mi, int pv, int os, int ps, int ki, double geb, 
double jf, double jh, int G_c, int G_a_c, int r_c, int A_L_c, double U_1, double U_2, double bb_g) 
: name(n), strasse(s), ort(o), stkl(st), f(fa), krv(k), abv(a), zkf(z), kv(kver), pkpv(pk), mitag(mi), pvz(pv), ost(os), pvs(ps), kist(ki), gebjahr(geb), jfreib(jf), jhinzu(jh), 
Gleitzone_check(G_c), Gleitzone_alt_check(G_a_c), rente_check(r_c), AN_Lst_check(A_L_c), U1(U_1), U2(U_2), bbg(bb_g) 
{ 
} 

int main() 
{ 
    system("PAUSE"); 

    stammdaten Personstamm1{ "Klaus Müller", "Parkstrasse 12", "78578 Monopoly", 1, 1000, 1, 1, 0, 15.5, 0.0, 0, 1, 0, 0, 9, 1982, 0, 0, 0, 0, 0, 0, 1.7, 0.38, 0 }; 

    /**/ 
    Test_Lohnab Ablauf; 
    Ablauf.Gehaltsrechner(Personstamm1);   //, Abrechnung1); 
    system("PAUSE"); 
    /**/ 
} 

int Test_Lohnab::Gehaltsrechner(stammdaten &Test1)//, abrechnung &Abrech1) 
{ 
} 
+2

Оба класса не имеют точек с запятой после закрытия '}'. Также: В какой строке происходят эти ошибки? – niklasfi

+0

Ошибка 1 в int Gehaltsrechner (stammdaten & st, abrechnung &ab); Это была моя ошибка, на самом деле есть точки с запятой, я просто попытался уменьшить код, так что лучше видеть. – Mikehen

+0

Почему вы копируете строки дважды в stammdaten constructor? –

ответ

2

Ваши классы Test_Lohnab функции int Gehaltsrechner необходим объект типа stammdaten который компилятор еще не знает о том, поскольку она определена впоследствии. Вы можете использовать форвардную декларацию, чтобы сообщить ему об этом. Просто добавьте следующую строку после includes

class stammdaten; 
+1

или, поскольку 'stammdaten', похоже, не зависит от' Test_Lohnab', он может сначала определить «stammdaten» и «Test_Lohnab». – niklasfi

+0

О, да, это решает проблему. Благодарю вас, сэр. Жизнь может быть так легко. – Mikehen

+0

Просто благодарю вас за этот ответ. Для меня эта проблема решена. –

Смежные вопросы