01/10/2018, 14:11
Hỏi về function và enum C++
Em mới học C++ ạ.
Lúc đầu em viết code như thế này thì code không chạy và báo lỗi.
#include <iostream>
using namespace std;
int main()
{
enum Color
{
COLOR_BLACK, // assigned 0
COLOR_RED, // assigned 1
COLOR_BLUE, // assigned 2
COLOR_GREEN, // assigned 3
COLOR_WHITE, // assigned 4
COLOR_CYAN, // assigned 5
COLOR_YELLOW, // assigned 6
COLOR_MAGENTA // assigned 7
};
void printColor(Color color)
{
if (color == COLOR_BLACK)
std::cout << "Black";
else if (color == COLOR_RED)
std::cout << "Red";
else if (color == COLOR_BLUE)
std::cout << "Blue";
else if (color == COLOR_GREEN)
std::cout << "Green";
else if (color == COLOR_WHITE)
std::cout << "White";
else if (color == COLOR_CYAN)
std::cout << "Cyan";
else if (color == COLOR_YELLOW)
std::cout << "Yellow";
else if (color == COLOR_MAGENTA)
std::cout << "Magenta";
else
std::cout << "Who knows!";
}
Color color(COLOR_WHITE);
printColor(color);
return 0;
}
Nhưng khi em chuyển enum và printColor ra ngoài main() thì nó lại chạy.
Cao nhân nào giải thích giúp em với!
Bài liên quan
Ai dạy bạn C++ vậy?
Mình muốn tìm xin học.
cái enum với hàm print là một hàm con nên bạn phải để ở ngoài bạn học lại C đi cái này bạn hiểu sai hướng rùi
Mình tự tìm trên mạng học thôi, không ai dạy mình cả! -_-
C/C++ không có hàm trong hàm
Vì 1 class và 1 enum hay 1 hàm không thể chạy được trong main() được. Bản thân main() là 1 hàm và 1hàm không thể chứa 1 hàm khác được
Đúng.
Còn lại:
Sai.
Hỏi ngu: Nếu vậy thì ném lambdas vào
main()
có được tính là hàm trong hàm không nhỉ (chỉ xét trên mặt ngữ nghĩa, vì khi compile thìfoo
cũng chỉ là một cái function pointer)k phải nhé, lambda là anonymous class chứ không phải anonymous function. Function pointer của lambda sau khi compiled là pointer đến operator(). Với lambda không capture thì có thể pass lambda như function pointer, nhưng lambda có capture thì không pass thế được, phải 1 là qua template, 2 là qua std::function.
Cảm ơn m.n mềnh hiểu rồi! :3