c ++中头文件中的函数定义

时间:2014-06-17 05:35:33

标签: c++ inline header-files

我有一个简单的cpp项目,它有一个.cpp文件( a.cpp )和两个.h文件( h1.h和h2.h )。< / p>

在a.cpp中,我有:

#include "h2.h"
#include "h1.h"

在h1.h,我有:

double abc = fun1(a, b); //using fun1() here. a and b are string types.

在h2.h中,我有:

double fun1(string a, string b)
{ //definition
}

错误:在h1.h =&gt; fun1() in not declared in this scope.

查询是,我这样做吗?可以将函数定义放在头文件中吗?我应该在这里使用内联吗?

修改

这是h1.h

void checkForOneToOneSimilarity(vector <string> & folder1, vector <string> & folder2)
{
    int i=0, j=0, l1 = folder1.size(), l2 = folder2.size();
    //chunking(folder1[0]);
    while(i < l1 && j < l2)
    {
        if(folder1[i] == folder2[j])
        {
            double similarity = fun1(folder1[i], folder2[j]);
            i++;
            j++;
        }
        else if(folder1[i] > folder2[j]) j++;
        else i++;
    }
}

3 个答案:

答案 0 :(得分:1)

您已在h2.h中声明double fun1()
但你调用了函数double fun1(std::string, std::string) 编译器搜索未声明的定义double fun1(std::string, std::string)

您应该将h2.h中的函数标题更改为double fun1(string a,string b)

答案 1 :(得分:0)

你在 h2.h 中声明了 fun1()并调用了函数 h1.h 所以当编译器搜索 fun1时()它找不到它 尝试在“h1.h”文件中包含“h2.h”

答案 2 :(得分:0)

您可以将函数定义放在头文件中。 但这里有两件事是错的

  1. 您正在h1.h中调用fun1,但它在h2.h中定义。所以h1.h看不到h2.h中的定义。 为了克服这一点,包括h2.h到h1.h

  2. 您的函数调用和定义未匹配。

    • 功能定义应为

    double fun1(string a, string b) { //definition }

    • 匹配函数调用应该是

    double abc = fun1("some string 1", "some string 2");

  3. <强>附加: 正确的三个文件应该是

    h1.h

    double addTwoStringNumbers (string a, string b)
    {
     double tot = atof(a.c_str()) + atof(b.c_str());
     return tot;
    }
    

    h2.h

    #include "h1.h"    
    
    void showValue()
    {
     double total = addTwoStringNumbers("2", "3");
     std::cout << total << std::endl;
    }
    

    a.cpp

    #include "h2.h"
    
    int main()
    {
     showValue();
     return 0;
    }