---
title: "Problem med konstruktor..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/84382-problem-med-konstruktor"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Osaou"
published: "2003-08-16T20:15:19.000Z"
updated: "2003-08-17T23:14:46.000Z"
replies: 5
views: 295
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/84382-problem-med-konstruktor"
---

# Problem med konstruktor...

## #1 — Osaou, 2003-08-16T20:15Z

...tror jag iaf.
Detta är ett test av en klass vars objekt är tänkta att fungera som extremt långa integers.

```php
typedef int boolean;
#define false 0
#define true 1

class OsaouInt{
	public:
	OsaouInt(char startsumma[]="0"){
		if (startsumma=="0") num_length = 0;
		else{
			int i = strlen(startsumma);
			num_length = i;
			numbers = new int[i];
			for (; --i>=0;) numbers[i] = ((int)startsumma[i])-48;
		}
	}
	long length(void){
		return num_length;
	}
	void print(boolean with_commas=false){
		for (int i=-1; ++i<num_length;){
			cout << numbers[i];
			if (with_commas && ((num_length-i)%3==0) && (i<num_length-2))
				cout << ".";
		}
	}
	OsaouInt& operator =(const OsaouInt& other){
		if (this==&other) return *this;
		int i;
		for (i=-1; ++i<num_length;) numbers[i] = NULL;
		num_length = other.num_length;
		for (i=-1; ++i<num_length;) numbers[i] = other.numbers[i];
		return *this;
	}
	friend OsaouInt operator +(OsaouInt& other1, OsaouInt& other2);

	private:
	int * numbers;
	long num_length;
};
OsaouInt operator +(OsaouInt& other1, OsaouInt& other2){
	OsaouInt res;
	long temp_l = other2.length();
	int temp_v, temp_m = 0;
	if (other1.length()>other2.length()) temp_l = other1.length();
	int i = -1;
	while (++i<temp_l || temp_m>0){
		if (other1.numbers[i]==NULL) res.numbers[i] = other2.numbers[i];
		else if (other2.numbers[i]==NULL) res.numbers[i] = other1.numbers[i];
		else{
			temp_v = 0;
			if (temp_m>0) temp_v = temp_m;
			temp_m = 0;
			temp_v += other1.numbers[i]+other2.numbers[i];
			if (temp_v>9){
				temp_v -= 9;
				temp_m = temp_v;
			}
			res.numbers[i] = temp_v;
		}
	}
	res.num_length = i-1;
	return res;
}

void main(void){
	OsaouInt myBigInt("53008"), int1;

	int1 = myBigInt + "90";	// Här får jag nedanstående error...

	myBigInt.print();
	int1.print();
	getche();
}
```

Och detta är felmeddelandet jag får:
"binary '+' : no operator defined which takes a right-hand operand of type 'char \[3\]' (or there is no acceptable conversion)"

Ja, jag vet att print inte riktigt funkar än, men det hör inte till diskussionen.. ;)

Permalänk: https://www.webforum.nu/p/84382

## #2 — Sang-drax, 2003-08-16T20:54Z

Du måste definera en operator för OsaouInt och strängar om du vill att det ska fungera.

Dessutom: en C++-kompilator som inte stödjer true och false är ingen bra kompilator.

Permalänk: https://www.webforum.nu/p/1139438

## #3 — Osaou, 2003-08-17T21:41Z

Men jag har en konstruktor som tar ett argument bestående av en sträng! Då ska ju det gå i alla fall, eller hur?

Och min kompilator (Visual C++ 6) lär stödja booleans... ;) Men jag kör parallellt med skolans vilka dock inte gör det.

Permalänk: https://www.webforum.nu/p/1140105

## #4 — Duva, 2003-08-17T21:52Z

Japp, du har en konstruktor som tar en sträng som argument.

Men som Sang-drax skriver, så måste du överlagra additionsoperatorn så du kan addera ett objekt med en sträng.
Nu är den bara överlagrad så att du kan addera objekt.

Permalänk: https://www.webforum.nu/p/1140113

## #5 — Osaou, 2003-08-17T23:08Z

Nix... detta ska fungera. Eftersom det finns en konstruktor till klassen som har en sträng som argument ska jag inte behöva överlagra + operatorn. Då ska ett object skapas genom den konstruktorn med strängen som argument. ;)
Men i just detta fall verkar det inte funka... konstigt...

Permalänk: https://www.webforum.nu/p/1140144

## #6 — Duva, 2003-08-17T23:14Z

Det är inte konstigt.
Additionsoperatorn har högre prioritet än tilldelningsoperatorn och därför sker additionen före tilldelningen.

Har du läst felmeddelandet själv?
"binary '+' : no operator defined which takes a right-hand operand of type 'char \[3\]' (or there is no acceptable conversion)" 
Detta betyder att additionsoperatorn inte är överlagrad för att ta en sträng som operand.

Permalänk: https://www.webforum.nu/p/1140145

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/84382-problem-med-konstruktor
