抱歉超级noob问题。我是C ++和一般编程的新手,但我创建了这些程序来读取用户输入,然后读取它的命令和文件。我想要包含文件a.h但我遇到了麻烦。它告诉我我的功能主要是重新定义的,但当我把它拿出来时它会吐出更多的错误。我考虑的可能是if else声明?有什么建议让我去?
文件名tryout.cpp
#include <iostream>
#include <string.h>
#include "a.h"
using namespace std;
int main()
{
string cmd,command,file1,file2;
cout << "prompt<<";
cin >> cmd;
int len = cmd.length();
int temp = cmd.find('<');
command = cmd. substr(0,temp);
cout << "COMMAND: " << command << "\n";
cout << "File Redirection: " << cmd.at(temp) << "\n";
int temp1 = cmd.find('>');
file1 = cmd.substr(temp+1,temp1-temp-1);
cout << "FILE: " << file1 << "\n";
cout << "File Redirection: " << cmd.at(temp1) <<"\n";
file2 = cmd.substr(temp1+1, len-1);
cout << "File: " << file2 <<"\n";
return 0;
}
文件名“a.h”
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
string cmd,command1,command2,command3;
cout << "prompt<<";
cin >> cmd;
int len = cmd.length();
int temp = cmd.find('|');
command1 = cmd.substr(0,temp);
cout << "COMMAND: " << command1 << "\n";
cout << "PIPE: " << cmd.at(temp) << "\n";
command2 = cmd.substr(temp+1,len-1);
cout << "COMMAND: " << command2 << "\n";
cout << "PIPE: " << cmd.at(temp) << "\n";
command3 = cmd.substr(temp+2,len-2);
cout << "COMMAND: " << command3 << "\n";
return 0;
}
答案 0 :(得分:1)
&#34; .h&#34;后缀用于&#34;标题&#34;文件。如果你想到一封来自你的手机公司的套用信函,那么最重要的是告诉你公司名称,联系方式等等。
A&#34;头文件&#34;在C ++中,一个主要提供定义的文件,您可能需要在多个&#34; .cpp&#34;之间共享的内容。文件。 A&#34; .cpp&#34; file通常是一个&#34;编译单元&#34;,一个离散文件,编译器应该变成一个类似命名的&#34;目标文件&#34;。
因此,在您向我们展示的内容中,您的兴趣分歧是错误的。您实际上已实施主要在&#34; .h&#34;文件。
当编译器读取你的&#34; .cpp&#34;文件,它读入iostream
和string.h
标题,然后它读入a.h
,其中包含{em>实现 { {1}}。然后,它返回到处理main
,在那里它看到 tryout.cpp
的另一个实现。
解决方案:从main
删除主页。
答案 1 :(得分:0)
您不能拥有多个main()函数。编译时,C ++编译器将获取头文件的内容并将它们添加到#include语句所在的位置。如果它找到多个main()函数,则它不知道在哪里设置可执行文件的起始点。您必须将头文件功能重命名为其他功能。另请注意,通常的做法是不在头文件中包含函数定义,而不是使用函数声明,并在其他.cpp或预编译的.lib文件中包含定义。
我发现this文章有助于了解标头的工作原理。
答案 2 :(得分:0)
你不能有两个主要功能。如果你想要包含你的文件,你应该把所有东西放在一个函数中或者更好地构建一个类。