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!

Ai dạy bạn C++ vậy?

Mình muốn tìm xin học.

2 Likes

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 :smiley:

1 Like

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.

int main()
{
  class XXX
  {
    
  };
  enum XXXX
  {
    
  };
  
  enum class XX
  {
    
  };
  
}
1 Like

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ỉ :joy: (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)

#include <iostream>

int main()
{
    int i = 42;
    const auto foo = [&] () -> void { 
        i += 666;
    };

    foo();
    std::cout << i; // i = 708
}
2 Likes

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.

4 Likes

Cảm ơn m.n mềnh hiểu rồi! :3

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?