C++ 为什么在意外标记附近会出现语法错误?命令行参数?
以下是我的代码-不确定为什么会收到此错误消息:C++ 为什么在意外标记附近会出现语法错误?命令行参数?,c++,input,command-line-arguments,C++,Input,Command Line Arguments,以下是我的代码-不确定为什么会收到此错误消息: $ ./main.cpp "hello" "is" ./main.cpp: line 4: syntax error near unexpected token `(' ./main.cpp: line 4: `int main(int argc, char *argv[]){' 它在g++中编译得很好,但是当我运行它时,我得到了上面的错误。知道为什么吗?这是我的完整代码 #include <iostream> #include &l
$ ./main.cpp "hello" "is"
./main.cpp: line 4: syntax error near unexpected token `('
./main.cpp: line 4: `int main(int argc, char *argv[]){'
它在g++中编译得很好,但是当我运行它时,我得到了上面的错误。知道为什么吗?这是我的完整代码
#include <iostream>
#include <fstream>
int main(int argc, char *argv[]){
for(int i = 0; i < argc; i++){
std::cout << argc << " : " << argv[i] << '\n';
}
if (argc != 2){
std::cout << "\nUSAGE: 2 command line arguments please." << std::endl;
std::cout << "\n (1) Input file with raw event scores.\n (2) Output file to write into.";
}
// open the font file for reading
std::string in_file = argv[1];
std::ifstream istr(in_file.c_str());
if (!istr) {
std::cerr << "ERROR: Cannot open input file " << in_file << std::endl;
}
return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
对于(int i=0;i std::cout您必须运行已编译的程序,而不是源代码:
$ g++ -o main main.cpp
$ ./main "hello" "is"
3 : ./main
3 : hello
3 : is
USAGE: 2 command line arguments please.
(1) Input file with raw event scores.
(2) Output file to write into.ERROR: Cannot open input file hello
你的例子是尝试将C++代码作为shell脚本执行,这是行不通的。从你的程序运行测试结果来看,你仍然有一些错误要解决。
< p>编译器默认地创建一个名为“A.OUT”的可执行文件,所以你想做:
$a.out“你好”是
类型:“./main .CPP”正在尝试执行C++源文件,可能是shell脚本,因为其他两个答案都说,你把它作为shell脚本运行,隐式使用/bin /s
shell将以#
开头的前两行视为注释。第三行为空,不做任何操作。第四行被解释为命令int
,但括号是shell特有的,在这里使用不正确。$PATH
中可能没有int
命令>,但是shell没有机会报告,因为它被语法错误阻塞了
这些细节都不是特别重要;问题是您执行的程序不正确。但是,看看为什么会打印这些特定的错误消息可能会很有趣
并且,您似乎已经做了一些事情,比如代码> CHMOD+X Meal.CPP;否则shell将首先拒绝执行它。C++源文件可执行不会造成任何真正的伤害(只要它是可读和可写的),但它一点用处都没有,正如您所看到的,它延迟了对错误的检测。如果您执行
chmod-x main.cpp
,然后再次尝试/main.cpp
,则会出现“权限被拒绝”错误
正如卡尔的回答所说,你需要执行编译器生成的可执行文件,而不是C++源文件。这就是为什么有编译器。编译器(实际上,链接器)会自动生成与其生成的可执行文件等价的<代码> CHMOD+X<代码>。
file
命令将告诉您某物是什么类型的文件,这将影响您可以对其执行的操作。例如,在运行g++main.cpp-o main
后,在我的系统上使用您的代码:
$ file main.cpp
main.cpp: ASCII C program text
$ file main
main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xacee0dfd9ded7aacefd679947e106b500c2cf75b, not stripped
$
<> >(<代码>文件< /C>命令应该已经识别了代码>主文件.CPP <代码>作为C++而不是C,但有时它猜错了。
“ELF”是我的系统使用的可执行格式;该文件包含可执行的机器代码以及一些其他信息。系统上预装的命令使用相同的格式
在您的系统上,详细信息可能会有所不同,在非Unix类系统(如MS Windows)上,详细信息也会有很大不同。例如,在Windows上,可执行文件通常以.exe
扩展名命名