第一次在一个项目中使用.h和多个.cpp文件,errorssss :(

时间:2013-11-04 23:31:17

标签: c++ arrays string sorting search

StackOverflow上的第二篇文章。我只是有一些一般性的问题,为什么我的程序按照它的方式行事,我不想帮助完成它我周五没有上课,显然我错过了很多。 我的任务是设计一个包含3个.cpp和2个.h文件的程序,实质上它将使用冒泡排序,插入排序,选择排序方法以及顺序和二进制搜索来搜索和排序字符串数组。然后我们应该对每种方法进行基准测试,以确定哪种方法最快。

我很困惑为什么编译器一直对我大吼大叫,这并没有多大意义我已经坐在这里大约一个小时摆弄不同的选项或以不同的方式键入代码但无济于事。

我的头文件

const int NOT_FOUND = -1;
int sequentialSearch(string a[], string needle, int length );

JohnSearch.cpp

#include "JohnSearch.h"
#include <string>

int sequentialSearch(string copied[], string needle, int length)
{
int i;   // iteration variable

// look at every element to see if it is the same as needle
for( i = 0; i < length; i++ )
    if( copied[i] == needle )
        return i;
return NOT_FOUND;
}

TestSearch.cpp

#include "JohnSearch.h"
#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

/*
** printArray(title,a,length): print out title and then the contents of array a
*/
void printArray(string title, string ref[], int length )
{
    int i;      // array iteration

    cout << title << ": \n";
    for( i = 0; i < length; i++ )
        cout<<setw(20)<<ref[i]<<"\n";
}

int main(void)
{
string reference[]={"John", "Allen", "Kevin", "Elisabeth"};
const int SZ=sizeof(reference)/sizeof(reference[0]);
string copied[SZ];

printArray("Reference", reference, SZ); 


// sequential search (on unsorted array)
cout<<"Search.sequential(ref,Kevin):\t"<<sequentialSearch(reference, "Kevin", SZ)<<endl;


system("Pause");
return 0;

}

错误

johnsearch.h(2): error C2065: 'string' : undeclared identifier
johnsearch.h(2): error C2146: syntax error : missing ')' before identifier 'a'
johnsearch.h(2): error C2059: syntax error : ')'
testjohnsearch.cpp(28): error C3861: 'copyArray': identifier not found
testjohnsearch.cpp(31): error C2064: term does not evaluate to a function taking 3 arguments
johnsearch.h(2): error C2065: 'string' : undeclared identifier
johnsearch.h(2): error C2146: syntax error : missing ')' before identifier 'a'
johnsearch.h(2): error C2059: syntax error : ')'
johnsearch.cpp(7): error C2065: 'string' : undeclared identifier
johnsearch.cpp(7): error C2146: syntax error : missing ')' before identifier 'copied'
johnsearch.cpp(7): error C2374: 'sequentialSearch' : redefinition; multiple initialization
johnsearch.h(2) : see declaration of 'sequentialSearch'
johnsearch.cpp(7): error C2059: syntax error : ')'
johnsearch.cpp(8): error C2143: syntax error : missing ';' before '{'
johnsearch.cpp(8): error C2447: '{' : missing function header (old-style formal list?)

我显然做了一些完全错误的事情。 JohnSearch.h需要JohnSearch.cpp吗? JohnSearch.h中函数的前向声明在JohnSearch.cpp中定义,所以我需要这两个文件正确吗?

我真的很困惑。我们应该修改的示例程序有2个.h文件和3个.cpp文件。其中2个.cpp文件与2个.h文件对应,这就是为什么我认为我还需要2个.h文件和3个.cpp文件。

字符串仍未定义。

3 个答案:

答案 0 :(得分:0)

如有疑问,简化。您可以将代码简化为以下内容:

#include "JohnSearch.h"

void sequentialSearch(string needle)
{
}

并获得相同的错误(可能是有关未使用参数的警告)。

是的,string是一种变量,但它不是C ++语言本身的天生,它在标准库之一,你必须告诉编译器:

#include "JohnSearch.h"
#include <string>
using std::string;

void sequentialSearch(string needle)
{
}

答案 1 :(得分:0)

在您包含的头文件中,您需要具有与cpp文件中的函数完全相同的签名。

也不要忘记#include&lt; string&gt;,然后使用如下字符串:std :: string

E.g。

Int function(int number, int number2);

在你的cpp中

Int function(int number, int number2)
{
    // code
}

签名是“int function(int,int)”。

答案 2 :(得分:0)

  

johnsearch.h(2):错误C2065:'string':未声明的标识符

您的标头文件使用string,因此您需要在声明之前加入<string>。您还需要将其限定为std :: string,因为字符串类位于std命名空间

所以你的头文件变成了:

#include <string>
const int NOT_FOUND = -1;
int sequentialSearch(std::string a[], std::string needle, int length );

(您还应在头文件中使用include guards

你的JohnSearch.cpp也再次使用字符串,因为string位于std命名空间中,如果你不使用std::string

,你会收到错误

在TestSearch.cpp中,您的顶部有using namespace std;,您也可以在JohnSearch.cpp中执行相同操作,这样您就可以使用string代替std::string < / p>