Anfängerprobleme mit C++ und tcl

Sirakov

Mitglied
Hallo zusammen,

bevor ich mit dem Problem anfange, muss ich sagen, dass ich erst jetzt mit C++ und tcl zu tun habe - habe also wirklich nicht viel Ahnung davon.

Ich habe eine Klasse gebastelt, eine der Methoden will ich dann über tcl aufrufen können. Leider bekomme ich folgende Fehlermeldung:

Code:
apps/im.cc: In member function »virtual int IMApp::command(int, const char* const*)«:
apps/im.cc:36: Fehler: keine passende Funktion für Aufruf von »IMApp::emptyList(const char* const&)«
apps/im.h:18: Anmerkung: Kandidaten sind: bool IMApp::emptyList(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >) const
apps/im.cc:31: Warnung: Variable »tcl« wird nicht verwendet
make: *** [apps/im.o] Fehler 1

Hier ist mein C++ Quelltext:

Code:
#include <iostream>
#include <ostream>
#include <string>
#include <vector>
#include <stdio.h>
#include "im.h"

using namespace std;

static class IMAppClass : public TclClass {
public:
	IMAppClass() : TclClass("Agent/IMApp") {}
	TclObject* create(int, const char*const*) {
    	return(new IMApp());
 	}
} class_imapp_class;

int IMApp::command(int argc, const char*const* argv) {
	Tcl& tcl = Tcl::instance();

	if (argc == 3) {
		if (strcmp(argv[1], "empty") == 0) {
					agent_ = (Agent*) TclObject::lookup(argv[2]);
					IMApp::emptyList(argv[2]); // Methode emptyList wird aufgerufen.
					return(TCL_OK);
				}
	}
	return (Agent::command(argc, argv));
}

IMApp::IMApp() : Agent(PT_PING) {
}

bool IMApp::emptyList(vector<string> nodeVectorID) const {
	if (nodeVectorID.size()==0) {
		return true;
	} else {
		return false;
	}
}

Die Header-Datei sieht etwa so aus:

Code:
#ifndef ns_im_h
#define ns_im_h

#include "agent.h"

class IMApp : public Agent {
public:
	IMApp();
protected:
	bool emptyList(vector<string> nodeVectorID) const;
	virtual int command(int argc, const char*const* argv);
	Agent *agent_;
};

#endif

Das ganze brauche ich für das Netzwerksimulator, um eine IM-Anwendung zu simulieren. Als erstes will ich aber bloß einen Array erstellen und überprüfen, ob dieser Leer ist. Kann mir jemand vielleicht helfen? Ich weiss wirklich nicht, was ich falsch mache bzw. wie ich das Problem lösen kann :(

Danke im voraus!
 
Hi.

Die Datentypen passen absolut nicht zusammen. Du versuchst eine Methode mit einem "const char* const" als Argument aufzurufen, während die Methode ausschließlich einen std::vector<string>" akzeptiert.

So ganz verstehe ich nicht, was der Sinn hinter dem Aufruf von emptyList ist.

Willst du dort prüfen, ob das Array argv leer ist? Du hast doch aber bereits überprüft, das argc gleich 3 ist - d.h. das Array argv enthält 3 Elemente.

Gruß
 
Zurück