2 / 23
class ClapTrap {
string name ...
}
class ScavTrap : public ClapTrap {
...
// not have member variable
}
class FragTrap : public ClapTrap {
...
// not have member variable
}
class DiamondTrap : public FragTrap, ScavTrap { ... }
DiamondTrap::DiamondTrap(const DiamondTrap &diamondTrap)
: ClapTrap(diamondTrap), name(diamondTrap.name) {}
위 코드에서 gcc로 -Wextra 플래그를 사용했을 때 에러가난다.
에러메세지를 보고만은 이해가 안가서, chatgpt에게 물어봤는데 ScavTrap와 FragTrap가 초기화가 안 돼서 그렇다고 한다.
그러면 기본생성자도 오류가 나야 할 것 같은데, 복사연산자에서만 일어나는게 잘 이해가 가지 않지만..
DiamondTrap::DiamondTrap(const DiamondTrap &diamondTrap)
: ClapTrap(diamondTrap), ScavTrap(diamondTrap), FragTrap(diamondTrap), name(diamondTrap.name) {}
이렇게 변경하면 에러가 발생하지 않았다. 맥에서는 에러가 발생하지 않고, 내 코드 상황에서는 의미가 없는 에러같아 평가에서 문제를 제기한다면 디펜스로 넘기면 될 것 같다.
-Wshadow flag
-Wshadow 플래그는 섀도잉이라는걸 막는 플래그같다. 섀도잉은..
int main() {
int a = 0;
...
{
// in scope
int a = 0;
}
}
위 코드에서 스코프 밖의 a와 스코프 안의 a는 메모리에 각각 할당된다. 다른 언어에서는 모르겠지만 이게 좋은 습관은 아니니 c++에서는 지양하라고 만든 플래그인 것 같다.
-MMD -MP flag
의존성 정보가 담긴 .d 파일이 생성된다.
foo.o: hoo.h foo.c
foo.h:
만들어진 파일을 Makefile의 include foo.d 구문으로 Makefile의 타겟으로 사용할 수 있는데,
.d 파일이 없다면 에러가 발생한다.
-include foo.d
- prefix를 사용하면 파일이 없을 때는 include하지 않아 에러가 발생하지 않는다.
'일기' 카테고리의 다른 글
06/15 가상 머신에서 특정 url로 요청을 보내면 응답을 받을 수 없는 문제 (0) | 2023.06.15 |
---|---|
23/03/31 3월의 마지막을 서류 제출로 보낸 건에 대하여 (6) | 2023.03.31 |
3 / 17 template method const, rand seed (0) | 2023.03.17 |
2 / 28 객체의 정적, 동적할당 (3) | 2023.02.28 |
2 / 26 다형성과 동적바인딩, 미니쉘 로직 (2) | 2023.02.26 |