2016-04-22 5 views
0

Ich arbeite an einem Projekt für die Klasse, aber immer wieder den Fehler: keine Instanz der überladenen Funktion entspricht Argumentliste. Es verweist auf meine String-Klassen. Was ich versuche zu tun, ist eine Kopie erstellen, Concat und Count-Funktionen ohne Verwendung der String-Klasse. Jede Hilfe würde sehr geschätzt werden.Keine Instanz der überladenen Funktion entspricht der Argumentliste.

#define _CRT_SECURE_NO_WARNINGS 
#include <iostream> 
#include <string> 

using namespace std; 

class String 
{ 
private: 
char str[100]; 
char cpy[100]; 
public: 

static const char NULLCHAR = '\0'; 

String() 
{ 
    str[0] = NULLCHAR; 
    cpy[0] = NULLCHAR; 
} 

String(char* orig, char* cpy) 
{ 
    Copy(orig, cpy); 
} 

void Display() 
{ 
    cout << str << endl; 
} 

void Copy(char* orig, char* dest) 
{ 

    while (*orig != '\0') { 
     *dest++ = *orig++; 
    } 
    *dest = '\0'; 



} 

void Copy(String& orig, String& dest) 
{ 
    Copy(orig.str, dest.cpy); 
} 

void Concat(char* orig, char* cpy) 
{ 
    while (*orig) 
     orig++; 

    while (*cpy) 
    { 
     *orig = *cpy; 
     cpy++; 
     orig++; 
    } 
    *orig = '\0'; 

} 

void Concat(String& orig, String& cpy) 
{ 
    Concat(orig.str, cpy.cpy); 
} 

int Length(char* orig) 
{ 
    int c = 0; 
    while (*orig != '\0') 
    { 
     c++; 
     *orig++; 
    } 
    printf("Length of string is=%d\n", c); 
    return(c); 

} 
}; 

int main() 
{ 
String s; 

s.Copy("Hello"); 
s.Display(); 
s.Concat(" there"); 
s.Display(); 

String s1 = "Howdy"; 
String s2 = " there"; 
String s3; 
String s4("This String built by constructor"); 
s3.Copy(s1); 
s3.Display(); 
s3.Concat(s2); 
s3.Display(); 
s4.Display(); 


system("pause"); 
return 0; 
} 
+0

Die Anzahl der Argumente stimmt nicht mit 'Copy' und' Concat' überein. – songyuanyao

Antwort

0

Es sieht aus wie Ihre Copy und Concat Funktionen nehmen jeweils zwei Parameter, aber Sie geben ihnen sowohl einen einzelnen Parameter. Wenn Sie sie in einem String-Objekt kopiert werden soll, sollte Ihr Code aussehen wie:

String Copy(char* orig) 
{ 
    // Same copy logic you have, 
    // except copy into "*this" 
} 
+0

Würde es Ihnen etwas ausmachen, auf "* this" ein wenig zu erweitern. Ich versuche, die Änderung zu machen und bekomme einen Fehler, der sagt: "Ausdruck muss ein modifizierbarer Wert sein. – K455306

+0

Google Ihre Fehler? Beste, die ich denken kann, ist dies http://stackoverflow.com/questions/6008733/expression-must- be-a-modifizierbar-l-Wert – Dagrooms

0

Da die Fehlermeldung sagt, gibt es keine Version des Konstruktor für Ihre String-Klasse, die einen einzigen Parameter. Sie haben einen Standardkonstruktor und einen, der zwei Parameter benötigt.

Sie benötigen einen definieren, die einen einzigen Parameter und initialisiert die str

0

s4 String („Dieser String von Konstruktor gebaut“); Diese Anweisung benötigt eine Konstruktionsfunktion

String (char *);

+0

Und String s1 = "Howdy"; String s2 = "da"; auch die Konstruktion Funktion oben muss, sobald Sie zur Verfügung gestellt, soll der Fehler beseitigt werden.. – shiningstarpxx

Verwandte Themen