我的代码在CodeLite中编译运行正常。然后我尝试在Clion中运行同样的代码,但是它给了我这个错误:
Scanning dependencies of target leastSquareFitting
[ 50%] Building CXX object CMakeFiles/leastSquareFitting.dir/main.cpp.o
[100%] Linking CXX executable leastSquareFitting
Undefined symbols for architecture x86_64:
"printMatrix(Matrix)", referenced from:
_main in main.cpp.o
"constructMatrix(int, std::__1::vector<double,
std::__1::allocator<double> >)", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
make[3]: *** [leastSquareFitting] Error 1
make[2]: *** [CMakeFiles/leastSquareFitting.dir/all] Error 2
make[1]: *** [CMakeFiles/leastSquareFitting.dir/rule] Error 2
make: *** [leastSquareFitting] Error 2
我尝试在网上搜索这个错误,但是根据我找到的内容无法解决它。以下是我的代码:
main.cpp
#include "fullMatrix.h"
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<double> value = {1.0,2.0,3.0,4.0};
Matrix m = constructMatrix(2, value);
printMatrix(m);
return 0;
}
fullMatrix.cpp
#include "fullMatrix.h"
#include <iostream>
#include <vector>
#include "cmath"
#include <cstdio>
using namespace std;
Matrix constructMatrix(int size, vector<double> x) {
//initiate variables of a matrix
Matrix myMatrix;
myMatrix.size = size;
myMatrix.value = x;
return myMatrix;
}
void printMatrix(Matrix matrix){
// Loop through rows and columns to display all values
for (int row = 0; row < matrix.size; row++) {
for (int col = 0; col < matrix.size; col++) {
cout <<matrix.value[col+row*matrix.size] << " ";
}
cout << endl;
}
}
fullMatrix.h
#ifndef fullMatrix_h
#define fullMatrix_h
#include <vector>
using namespace std;
struct Matrix
{
int size;
vector<double> value;
};
Matrix constructMatrix(int size, vector<double> x);
void printMatrix(Matrix matrix);
#endif
我是一个CMake的新手,以下是CMakeLists.txt文件的内容:
cmake_minimum_required(VERSION 3.10)
project(leastSquareFitting)
set(CMAKE_CXX_STANDARD 11)
add_executable(leastSquareFitting main.cpp)
谢谢!非常感谢任何帮助!