C ++当我包含标题时无法编译

问题描述 投票:0回答:1

我是法国开发人员(抱歉我的英语不好)。我正在从事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文件时,才可以对其进行编译。我正在使用可视代码,...

c++ makefile compiler-errors include
1个回答
0
投票

您需要在编译语句中包含源文件,即

g++ main.cpp class.cpp method.cpp -o main.exe
© www.soinside.com 2019 - 2024. All rights reserved.