2017-04-12 84 views
-2

我是C++新手,目前我正在學習void函數。 我正在嘗試使用void函數編寫一個方形數字的函數。這是我的代碼。C++ void函數練習錯誤

#include "std_lib_facilities.h" 

void square(int); 

int main() 
{ 
int x = 0; 
cout << "Please enter a number. It will be squared."; 
cin >> x; 
cout << x << 't' << square(x); 
} 

void square(int x) 
{ 
int y = x*x; 
cout << y; 
} 

的IDE給我的錯誤是:

no match for 'operator<<' (operand types that are 'std::basic_ostream<char>' 
and 'void') 

從經驗來說,很多人會問的頭文件std_lib_facilities.h,這是沒有問題的。我可以這麼說,因爲我使用這個頭文件進行了很多練習,並且他們都工作了。

非常感謝您的幫助!

+1

您正試圖打印調用該函數的結果。 – chris

回答

3

void函數不能直接返回值。大多數人會使用非空函數來實現平方,像這樣:

int square(int x) 
{ 
    return x * x; 
} 

我看到你的square函數的平方值寫入std::cout本身。這是奇怪的,但如果你真的想這樣做的,則應更換main功能與最後一行:

cout << x << 't'; 
square(x); 

不能通常使用void函數的結果的表達式,它是您的原始代碼的問題。

0

square()是無效的 - 即它不返回任何東西。

cout << x << 't' << square(x);嘗試打印返回值square()(我們已經說過,它不存在)。這是沒有道理的,所以編譯器會抱怨。

你想要做的就是讓square返回一個int而不是打印它。

int square(int x) 
{ 
    return x*x; 
} 
0

我猜想改變返回類型會使錯誤消失。編譯器錯誤是因爲沒有過載版本的< <它將void作爲參數,因爲你的函數是(錯誤地)告訴編譯器。