0
이것은 단지 관찰 일 뿐이므로 어디에 문제가 있는지 이해하지 못합니다. 나는 벡터 덧셈 연산자를 구현하고 모든 것은 주 함수에서 꽤 잘 작동한다. 하지만 Google 테스트에서 테스트 할 때 컴파일 오류가 발생했습니다.gtest : 'operator +'에 대한 정의되지 않은 참조
In function `ZN15Basic_Dirs_Test8TestBodyEv':
C:/Users/home/Documents/clion/example/test/main.cpp:10: undefined reference
to `operator+(std::vector<int, std::allocator<int> > const&,
std::vector<int, std::allocator<int> > const&)'
src/class.cpp 파일을 제거하면 컴파일됩니다. 어떻게 작동하는지 말해 줄 수 있니? :)
코드는 다음과 같습니다.
SRC/class.h
#ifndef EXAMPLE_CLASS_H
#define EXAMPLE_CLASS_H
#include <vector>
std::vector<int> operator+(const std::vector<int>& a, const std::vector<int>& b);
#endif //EXAMPLE_CLASS_H
SRC/class.cpp
#include "class.h"
std::vector<int> operator+(const std::vector<int>& a, const std::vector<int>& b) {
if (a.size() != b.size()) {
std::cerr << "vectors are not of the same size!\n";
exit(1);
}
std::vector<int> res(a.size());
for (unsigned i = 0; i < a.size(); ++i) {
res[i] = a[i] + b[i];
}
return res;
}
테스트/MAIN.CPP
#include "class.h"
#include <gtest/gtest.h>
using namespace std;
TEST(Basic, Dirs) {
std::vector<int> a = {1, 1, 0};
std::vector<int> b = {2, 1, 0};
std::vector<int> c = a+b;
EXPECT_EQ(c[0], 3);
EXPECT_EQ(c[1], 2);
EXPECT_EQ(c[2], 0);
}
./CMakeLists
cmake_minimum_required(VERSION 3.7)
project(example)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES src/main.cpp src/class.cpp)
add_subdirectory(test)
add_executable(example ${SOURCE_FILES})
테스트/CMakeLists
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
add_subdirectory("../lib/googletest" "${CMAKE_CURRENT_BINARY_DIR}/gtest_build")
include_directories(../lib/googletest/googletest/include)
include_directories(../src/)
add_executable(runtest main.cpp)
target_link_libraries(runtest gtest gtest_main)
이 더 CMakc 질문처럼 보인다, class.cpp를'add_executable (runtest main.cpp ../ src/class.cpp)'와 같이'test'에 추가해야한다고 생각합니다. –