-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
왜 안될까요 컴파일러 문제일까요?
23.07.15 23:42 작성 조회수 253
1
헤더만 사용하면 항상 에러가 나는데 왜인지 잘 모르겠습니다.
directory 구조는
8-8_haeder
- main.cpp
- calc.cpp
- Calc.h
하지만 빌드하면 아래와 같은 에러가 뜹니다
Starting build...
/usr/bin/clang++ -std=c++17 -fcolor-diagnostics -fansi-escape-codes -g /Users/user/Documents/cpp/8-8_header/main.cpp -o /Users/user/Documents/cpp/8-8_header/main
Undefined symbols for architecture arm64:
"Calc::add(int)", referenced from:
_main in main-0ed3f2.o
"Calc::mul(int)", referenced from:
_main in main-0ed3f2.o
"Calc::sub(int)", referenced from:
_main in main-0ed3f2.o
"Calc::print()", referenced from:
_main in main-0ed3f2.o
"Calc::Calc(int)", referenced from:
_main in main-0ed3f2.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Build finished with error(s).
Mac m1인데 컴파일러 문제일까요?
아래는 코드입니다.
//calc.cpp
#include "Calc.h"
using namespace std;
Calc::Calc(int init_value)
: m_value(init_value) {}
Calc& Calc::add(int value)
{
m_value += value;
return *this;
}
Calc& Calc::mul(int value)
{
m_value *= value;
return *this;
}
Calc& Calc::sub(int value)
{
m_value -= value;
return *this;
}
void Calc::print()
{
cout << m_value << endl;
}
//Calc.h
#pragma once
#include <iostream>
class Calc
{
private:
int m_value;
public:
Calc(int init_value);
Calc& add(int value);
Calc& mul(int value);
Calc& sub(int value);
void print();
};
//main.cpp
#include <iostream>
#include "Calc.h"
using namespace std;
int main()
{
Calc cal(10);
cal.add(10).sub(1).mul(2).print();
}
답변을 작성해보세요.
2
Soobak
2023.07.16
안녕하세요, 답변 도우미 Soobak 입니다.
에러 내용을 살펴보니, 현재 main.cpp
파일만을 컴파일하고 계셔서 링킹 과정에서 에러가 나고 있네요.
calc.cpp
파일도 추가시키셔서 컴파일을 진행해보세요.
clang++
을 사용하신다면, 해당 cpp
파일들이 있는 곳에서 clang++ -std=c++17 ./main.cpp ./clac.cpp
명령어로 컴파일 해보시길 바랍니다.
답변 1