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!

Dark.Hades viết 16:20 ngày 01/10/2018

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

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

Vĩ Huỳnh viết 16:12 ngày 01/10/2018

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

Battousai Hitokiri viết 16:21 ngày 01/10/2018

Mình tự tìm trên mạng học thôi, không ai dạy mình cả! -_-

rogp10 viết 16:24 ngày 01/10/2018

C/C++ không có hàm trong hàm

Aragami1408 viết 16:23 ngày 01/10/2018

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

Dark.Hades viết 16:15 ngày 01/10/2018

1 hàm không thể chạy được trong main() được

Đúng.

Còn lại:

Vì 1 class và 1 enum

Sai.

int main()
{
  class XXX
  {
    
  };
  enum XXXX
  {
    
  };
  
  enum class XX
  {
    
  };
  
}
Florastamine viết 16:20 ngày 01/10/2018

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)

#include <iostream>

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

    foo();
    std::cout << i; // i = 708
}
Nguyễn Quốc Thái viết 16:13 ngày 01/10/2018

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.

Battousai Hitokiri viết 16:24 ngày 01/10/2018

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

Bài liên quan
0