g++ *.cpp /tmp/ccEH60BU.o: In function `Nummgr::delnum(int)': /tmp/ccEH60BU.o(.text+0x0): multiple definition of `Nummgr::delnum(int)' /tmp/ccLVnn4N.o(.text+0x18): first defined here /tmp/ccEH60BU.o: In function `Nummgr::getmax(void)': /tmp/ccEH60BU.o(.text+0x34): multiple definition of `Nummgr::getmax(void)' /tmp/ccLVnn4N.o(.text+0x4c): first defined here /tmp/ccKhIvO0.o: In function `Hline::setnextline(Hline *)': /tmp/ccKhIvO0.o(.text+0x0): multiple definition of `Hline::setnextline(Hline *)' /tmp/ccLVnn4N.o(.text+0x0): first defined here /tmp/ccKhIvO0.o: In function `Nummgr::delnum(int)': /tmp/ccKhIvO0.o(.text+0x18): multiple definition of `Nummgr::delnum(int)' /tmp/ccLVnn4N.o(.text+0x18): first defined here /tmp/ccKhIvO0.o: In function `Nummgr::getmax(void)': /tmp/ccKhIvO0.o(.text+0x4c): multiple definition of `Nummgr::getmax(void)' /tmp/ccLVnn4N.o(.text+0x4c): first defined here /tmp/ccPqUxZt.o: In function `Nummgr::delnum(int)': /tmp/ccPqUxZt.o(.text+0x0): multiple definition of `Nummgr::delnum(int)' /tmp/ccLVnn4N.o(.text+0x18): first defined here /tmp/ccPqUxZt.o: In function `Nummgr::getmax(void)': /tmp/ccPqUxZt.o(.text+0x34): multiple definition of `Nummgr::getmax(void)' /tmp/ccLVnn4N.o(.text+0x4c): first defined here /tmp/ccXW5oU3.o: In function `Hline::setnextline(Hline *)': /tmp/ccXW5oU3.o(.text+0x0): multiple definition of `Hline::setnextline(Hline *)' /tmp/ccLVnn4N.o(.text+0x0): first defined here /tmp/ccXW5oU3.o: In function `Nummgr::delnum(int)': /tmp/ccXW5oU3.o(.text+0x18): multiple definition of `Nummgr::delnum(int)' /tmp/ccLVnn4N.o(.text+0x18): first defined here /tmp/ccXW5oU3.o: In function `Nummgr::getmax(void)': /tmp/ccXW5oU3.o(.text+0x4c): multiple definition of `Nummgr::getmax(void)' /tmp/ccLVnn4N.o(.text+0x4c): first defined here /tmp/ccleMZxq.o: In function `Hline::setnextline(Hline *)': /tmp/ccleMZxq.o(.text+0x0): multiple definition of `Hline::setnextline(Hline *)' /tmp/ccLVnn4N.o(.text+0x0): first defined here /tmp/ccleMZxq.o: In function `Nummgr::delnum(int)': /tmp/ccleMZxq.o(.text+0x18): multiple definition of `Nummgr::delnum(int)' /tmp/ccLVnn4N.o(.text+0x18): first defined here /tmp/ccleMZxq.o: In function `Nummgr::getmax(void)': /tmp/ccleMZxq.o(.text+0x4c): multiple definition of `Nummgr::getmax(void)' /tmp/ccLVnn4N.o(.text+0x4c): first defined here /tmp/ccIA7dYg.o: In function `Nummgr::delnum(int)': /tmp/ccIA7dYg.o(.text+0x0): multiple definition of `Nummgr::delnum(int)' /tmp/ccLVnn4N.o(.text+0x18): first defined here /tmp/ccIA7dYg.o: In function `Nummgr::getmax(void)': /tmp/ccIA7dYg.o(.text+0x34): multiple definition of `Nummgr::getmax(void)' /tmp/ccLVnn4N.o(.text+0x4c): first defined here collect2: ld returned 1 exit status
たとえば enum foo {A,B,C} m, n; という変数m,nがあるとして、 m = m + n; はコンパイル通らない。右辺が最終的にint型だから。しかし m = (foo)(m + n); なら通る。これは実際には m = (foo)((int)m + (int)n); と同じこと(それが望んだ結果かどうかは別)。