im a french dev (sorry for my bad english). Im working on a C++ project. I cannot build my project if im including .h files ... its compiling only when im including .cpp files. Im using visual code, the extension from Microsoft for C/C++ and MinGW
Here is my command line to compile
g++ -g main.cpp -o main.exe
And here is my code :
method.cpp
#include <string>
#include "../Include/method.h"
using namespace std;
Method::Method(string methodName,string modifier,string returnType,string parameters)
{
this->methodName= methodName;
this->modifier = modifier;
this->parameters = parameters;
this->returnType = returnType;
}
method.h
#include <string>
using namespace std;
class Method
{
public:
Method(string methodName,string modifier,string returnType,string parameters);
private:
string methodName;
string returnType;
string parameters;
string modifier;
};
class.h
#include "../Include/method.h" // replace it to "../Members/method.cpp" and it will compile !!
using namespace std;
class Class
{
public:
Class(vector<string> lines);
bool Build();
private:
vector<string> lines;
bool BuildMethods();
bool BuildFields();
vector<Method*> methods;
};
and finally, class.cpp
#include "../Include/class.h"
#include <string>
#include <regex>
using namespace std;
const string METHOD_PATTERN = "(public|private) (\\w+) (\\w+)\\((.*?)\\)";
Class::Class(vector<string> lines)
{
this->lines = lines;
}
bool Class::Build()
{
return BuildMethods() && BuildFields();
}
bool Class::BuildMethods()
{
for (int i = 0;i < lines.size();i++)
{
string line = lines[i];
regex r{METHOD_PATTERN, regex_constants::ECMAScript};
smatch match;
regex_search(line, match, r);
if (match.size() > 0)
{
string modifier = match[1];
string returnType = match[2];
string methodName = match[3];
string parameters = match[4];
Method * method = new Method(methodName,modifier,returnType,parameters);
// this->methods.push_back(method);
}
}
return true;
}
}
I get an error on this line (in class.cpp) :
Method * method = new Method(methodName,modifier,returnType,parameters);
here is my error
C:\Users\User\AppData\Local\Temp\ccq80SJg.o: In function `ZN5Class12BuildMethodsEv':
c:/users/User/desktop/nova/builder/members/class.cpp:38: undefined reference to `Method::Method(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2.exe: error: ld returned 1 exit status
The terminal process terminated with exit code: 1
its like the compiler do not find the .h , but its in project..and i dont understand why it is working with the .cpp files.
as i have said, if i replace this line in class.h
#include "../Include/method.h"
with this one :
#include "../Members/method.cpp"
Its compiling and working. But i know i shouldnt have to include the .cpp file
Ty for reading