Przeciazenie operatora

0

Witam zwracam sie do was z pytaniem dlaczego ten kod nie dziala (Jest on przepisany z symfonii c++ ) a na pewno dobrze go przepisalem bo sprawdzalem 5 x
Myslalem ze to dlatego bo mam stare wydanie i moze cos juz "wyszlo z uzytku"

 
#include <iostream>

using namespace std;

const int rozmiar = 1024;

class widmo{
public:
    int kanal[rozmiar];

    widmo(int wart = 0);

    widmo operator+(int);
};
widmo::widmo(int wart)
{
    for(int i = 0 ; i < rozmiar ; i++)
        kanal[i] = wart;
}
 widmo widmo:: operator+(int liczba){
    widmo rezultat;
    for(int i = 0 ; i < rozmiar ; i++)
        rezultat.kanal[i] = kanal[i] + liczba;
    return rezultat;
}

int main()
{
    widmo kobalt[5];
    widmo nowe;
        nowe = kobalt + 100;

        cout << "Przykladowo patrzymy na na kanal 44. \n"
                "Widmo 'kobalt' ma tam : "
                << kobalt.kanal[44]
                << "\na w widmie 'nowe' jest tam : "
                << nowe.kanal[44] << endl;

        nowe = nowe + 700;
        cout << "A teraz w kanale 44 obiektu 'nowe' jest :"
             << nowe.kanal[44] << endl;
    return 0;
}
0

Cofam tego posta jednak zle przepisalem ;p

0

A czego dokładnie nie rozumiesz z tego co mówi kompilator? Ideone:

prog.cpp: In function 'int main()':
prog.cpp14: error: ambiguous overload for 'operator=' (operand types are 'widmo' and 'widmo*')
nowe = kobalt + 100;
^
prog.cpp7: note: candidate: widmo& widmo::operator=(const widmo&) <near match="match">
class widmo{
^
prog.cpp7: note: conversion of argument 1 would be ill-formed:
prog.cpp23: error: invalid user-defined conversion from 'widmo*' to 'const widmo&' [-fpermissive]
nowe = kobalt + 100;
^
prog.cpp1: note: candidate is: widmo::widmo(int) <near match="match">
widmo::widmo(int wart)
^
prog.cpp1: note: conversion of argument 1 would be ill-formed:
prog.cpp23: error: invalid conversion from 'widmo*' to 'int' [-fpermissive]
nowe = kobalt + 100;
^
prog.cpp23: error: invalid conversion from 'widmo*' to 'int' [-fpermissive]
prog.cpp1: note: initializing argument 1 of 'widmo::widmo(int)'
widmo::widmo(int wart)
^
prog.cpp7: note: candidate: widmo& widmo::operator=(widmo&&) <near match="match">
class widmo{
^
prog.cpp7: note: conversion of argument 1 would be ill-formed:
prog.cpp23: error: invalid user-defined conversion from 'widmo*' to 'widmo&&' [-fpermissive]
nowe = kobalt + 100;
^
prog.cpp1: note: candidate is: widmo::widmo(int) <near match="match">
widmo::widmo(int wart)
^
prog.cpp1: note: conversion of argument 1 would be ill-formed:
prog.cpp23: error: invalid conversion from 'widmo*' to 'int' [-fpermissive]
nowe = kobalt + 100;
^
prog.cpp23: error: invalid conversion from 'widmo*' to 'int' [-fpermissive]
prog.cpp1: note: initializing argument 1 of 'widmo::widmo(int)'
widmo::widmo(int wart)
^
prog.cpp14: error: conversion to non-const reference type 'class widmo&&' from rvalue of type 'widmo' [-fpermissive]
nowe = kobalt + 100;
^
prog.cpp27: error: request for member 'kanal' in 'kobalt', which is of non-class type 'widmo [5]'
<< kobalt.kanal[44]

0

on nie nie dziala, tylko sie nie kompiluje
http://ideone.com/pKNKqG
czeba odwolac sie do
35. linia

kobalt[0].kanal[44] 

konretnego obiektu, a nie:

 kobalt.kanal[44]

poza tym, mi brakuje to przeciazonego operatora przypisania, byc moze jakiegos konsturktora przenoszacego

0

kobalt (sama nazwa to przeciez zerowy element ) wiec nie trzeba kobalt[0].cos_tam;
Juz mam temat zamkniety

1 użytkowników online, w tym zalogowanych: 0, gości: 1