我是法国开发人员(抱歉我的英语不好)。我正在从事C ++项目。如果im包含.h文件,则无法构建我的项目...仅当im包含.cpp文件时,才可以对其进行编译。我正在使用可视代码,Microsoft的C / C ++和MinGW扩展名]
这是我要编译的命令行
g++ -g main.cpp -o main.exe
这是我的代码:
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; };
最后是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; } }
我在此行上发生错误(在class.cpp中:)>
Method * method = new Method(methodName,modifier,returnType,parameters);
这是我的错误
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
它像编译器一样找不到.h,但是它在项目中..而且我不明白为什么它要使用.cpp文件。
正如我所说的,如果我替换class.h
#include "../Include/method.h"
与此一起:
#include "../Members/method.cpp"
其编译和工作。但我知道我不必包含.cpp文件
阅读提示
我是法国开发人员(抱歉我的英语不好)。我正在从事C ++项目。如果im包含.h文件,则无法构建我的项目...仅当im包含.cpp文件时,才可以对其进行编译。我正在使用可视代码,...
您需要在编译语句中包含源文件,即
g++ main.cpp class.cpp method.cpp -o main.exe