-3

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

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

我的头文件

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

约翰搜索.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;
}

测试搜索.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.cpp for JohnSearch.h 对吗?JohnSearch.h 中函数的前向声明是在 JohnSearch.cpp 中定义的,所以我需要这两个文件吗?

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

字符串仍然未定义。

4

3 回答 3

0

如有疑问,请简化. 您可以将代码归结为以下内容:

#include "JohnSearch.h"

void sequentialSearch(string needle)
{
}

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

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

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

void sequentialSearch(string needle)
{
}
于 2013-11-04T23:37:02.230 回答
0

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

也不要忘记#include <string>,然后使用类似的字符串:std::string

例如

Int function(int number, int number2);

在你的 cpp

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

签名是“int函数(int,int)”。

于 2013-11-04T23:37:44.647 回答
0

johnsearch.h(2):错误 C2065:“字符串”:未声明的标识符

您的头文件使用string,因此您需要<string>在声明之前包含 ,您还需要将其限定为 std::string 因为字符串类驻留在std命名空间中

所以你的头文件变成:

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

(您还应该在头文件中使用包含保护)

你的 JohnSearch.cpp 也使用了字符串,因为string它在std命名空间中,如果你不使用你会得到错误std::string

在您的 TestSearch.cpp 中,您using namespace std;在顶部有一个,您也可以在 JohnSearch.cpp 中执行相同的操作,这样您就可以使用string而不是std::string

于 2013-11-05T00:16:36.670 回答