error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and...











up vote
-4
down vote

favorite












This is my code (I write the essence only) and I get this:



error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘void’)



class Mobil {
public:
void print() const;
int getNumber() const;
double getData() const;
friend ostream& operator <<(ostream&, const Mobil&);
};

ostream& operator<<(ostream& out, const Mobil& mobil) {
out << mobil.print() << endl;
return out;
}


what is the problem?










share|improve this question


















  • 2




    Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream
    – Rhathin
    Nov 9 at 11:06






  • 1




    @Rhathin that sounds like a perfect answer to me.
    – darune
    Nov 9 at 11:13






  • 1




    @Rhathin Don't answer in the comments section, thanks.
    – Lightness Races in Orbit
    Nov 9 at 11:13















up vote
-4
down vote

favorite












This is my code (I write the essence only) and I get this:



error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘void’)



class Mobil {
public:
void print() const;
int getNumber() const;
double getData() const;
friend ostream& operator <<(ostream&, const Mobil&);
};

ostream& operator<<(ostream& out, const Mobil& mobil) {
out << mobil.print() << endl;
return out;
}


what is the problem?










share|improve this question


















  • 2




    Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream
    – Rhathin
    Nov 9 at 11:06






  • 1




    @Rhathin that sounds like a perfect answer to me.
    – darune
    Nov 9 at 11:13






  • 1




    @Rhathin Don't answer in the comments section, thanks.
    – Lightness Races in Orbit
    Nov 9 at 11:13













up vote
-4
down vote

favorite









up vote
-4
down vote

favorite











This is my code (I write the essence only) and I get this:



error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘void’)



class Mobil {
public:
void print() const;
int getNumber() const;
double getData() const;
friend ostream& operator <<(ostream&, const Mobil&);
};

ostream& operator<<(ostream& out, const Mobil& mobil) {
out << mobil.print() << endl;
return out;
}


what is the problem?










share|improve this question













This is my code (I write the essence only) and I get this:



error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘void’)



class Mobil {
public:
void print() const;
int getNumber() const;
double getData() const;
friend ostream& operator <<(ostream&, const Mobil&);
};

ostream& operator<<(ostream& out, const Mobil& mobil) {
out << mobil.print() << endl;
return out;
}


what is the problem?







c++ c++11






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 9 at 10:58









P. Mark

61




61








  • 2




    Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream
    – Rhathin
    Nov 9 at 11:06






  • 1




    @Rhathin that sounds like a perfect answer to me.
    – darune
    Nov 9 at 11:13






  • 1




    @Rhathin Don't answer in the comments section, thanks.
    – Lightness Races in Orbit
    Nov 9 at 11:13














  • 2




    Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream
    – Rhathin
    Nov 9 at 11:06






  • 1




    @Rhathin that sounds like a perfect answer to me.
    – darune
    Nov 9 at 11:13






  • 1




    @Rhathin Don't answer in the comments section, thanks.
    – Lightness Races in Orbit
    Nov 9 at 11:13








2




2




Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream
– Rhathin
Nov 9 at 11:06




Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream
– Rhathin
Nov 9 at 11:06




1




1




@Rhathin that sounds like a perfect answer to me.
– darune
Nov 9 at 11:13




@Rhathin that sounds like a perfect answer to me.
– darune
Nov 9 at 11:13




1




1




@Rhathin Don't answer in the comments section, thanks.
– Lightness Races in Orbit
Nov 9 at 11:13




@Rhathin Don't answer in the comments section, thanks.
– Lightness Races in Orbit
Nov 9 at 11:13












1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream.



To solve this problem, your print() method should return whatever you want to printout in one of types supported by ostream which you can find in reference.






share|improve this answer

















  • 1




    Or it can take std::ostream& and do whatever it needs to on behalf of the operator<<, though this is arguably less idiomatic nowadays.
    – Lightness Races in Orbit
    Nov 9 at 11:18











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














 

draft saved


draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53224411%2ferror-no-match-for-operator-operand-types-are-stdostream-aka-stdbasi%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
1
down vote



accepted










Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream.



To solve this problem, your print() method should return whatever you want to printout in one of types supported by ostream which you can find in reference.






share|improve this answer

















  • 1




    Or it can take std::ostream& and do whatever it needs to on behalf of the operator<<, though this is arguably less idiomatic nowadays.
    – Lightness Races in Orbit
    Nov 9 at 11:18















up vote
1
down vote



accepted










Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream.



To solve this problem, your print() method should return whatever you want to printout in one of types supported by ostream which you can find in reference.






share|improve this answer

















  • 1




    Or it can take std::ostream& and do whatever it needs to on behalf of the operator<<, though this is arguably less idiomatic nowadays.
    – Lightness Races in Orbit
    Nov 9 at 11:18













up vote
1
down vote



accepted







up vote
1
down vote



accepted






Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream.



To solve this problem, your print() method should return whatever you want to printout in one of types supported by ostream which you can find in reference.






share|improve this answer












Problem is this line: out << mobil.print() << endl;. Your print() method doesn't return anything (is type of void), so it can't be send to ostream.



To solve this problem, your print() method should return whatever you want to printout in one of types supported by ostream which you can find in reference.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 9 at 11:16









Rhathin

5391313




5391313








  • 1




    Or it can take std::ostream& and do whatever it needs to on behalf of the operator<<, though this is arguably less idiomatic nowadays.
    – Lightness Races in Orbit
    Nov 9 at 11:18














  • 1




    Or it can take std::ostream& and do whatever it needs to on behalf of the operator<<, though this is arguably less idiomatic nowadays.
    – Lightness Races in Orbit
    Nov 9 at 11:18








1




1




Or it can take std::ostream& and do whatever it needs to on behalf of the operator<<, though this is arguably less idiomatic nowadays.
– Lightness Races in Orbit
Nov 9 at 11:18




Or it can take std::ostream& and do whatever it needs to on behalf of the operator<<, though this is arguably less idiomatic nowadays.
– Lightness Races in Orbit
Nov 9 at 11:18


















 

draft saved


draft discarded



















































 


draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53224411%2ferror-no-match-for-operator-operand-types-are-stdostream-aka-stdbasi%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown