我想很多人在Windows 8上使用或习惯使用Sublime Text 2编辑器。我有一个奇怪的错误:C ++程序无法构建。我的目标是使用Sublime Text 2来构建和运行简单的程序,以便它可以在下面的窗口中显示输出,Xcode或Codeblocks样式。
我的C ++。sublime-build(默认设置):
{
"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++",
"variants":
[
{
"name": "Run",
"cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
}
]
}
当我编译一个简单的hello world程序时,它编译并运行正常,输出显示在sublime文本的下面板上,就像我想要的那样。
但如果我运行一个更复杂的程序,如下所示:
// main.cpp
// LongestIncreasingSubsequence
#include <iostream>
#include <vector>
#include <limits>
using namespace std;
int main(int argc, const char * argv[])
{
int n;
cin >> n;
vector<int> nums(n);
vector<int> lis_so_far(n);
int final_longest = 1;
for (int i=0; i<n; i++) {
cin >> nums[i];
lis_so_far[i] = 1;
}
int so_far;
for (int j=n-1; j>=0; j--) {
so_far = 0;
for (int i=j+1; i<n; i++) {
// cout << "hi" <<endl;
if (nums[i] > nums[j]) {
// cout << "hello" <<endl;
if (lis_so_far[i] > so_far ) {
so_far = lis_so_far[i];
//cout << so_far << endl;
}
}
}
if (j<n-1) {
lis_so_far[j] += so_far;
if (lis_so_far[j] > final_longest) {
final_longest = lis_so_far[j];
}
}
}
for (int i=0; i<n; i++) {
cout << lis_so_far[i] << endl;
}
cout << final_longest << endl;
return 0;
}
,它给了我一个缺少limits.h错误,即使我安装了cygwin。是不是ST2应该知道c ++库的位置?:
C:\Users\Leonardo\Desktop\main5.cpp:11: limits: No such file or directory
[Finished in 6.5s with exit code 1]
如果我评论#include限制行,它会构建,但是当我运行它时,它会给我一个权限被拒绝错误,即使没有运行命令提示符:
/cygnus/cygwin-b20/H-i586-cygwin32/i586-cygwin32/bin/ld: cannot open output file C:\Users\Leonardo\Desktop/main5.exe: Permission denied
collect2: ld returned 1 exit status
有什么想法吗?我只是希望ST2能够用作Xcode或Codeblocks。
答案 0 :(得分:0)
权限被拒绝错误:如果您的程序正在运行,请检查任务管理器(查看进程)。 缺少标题:您的编译器(g ++)应该知道它可以在哪里找到,而不是文本编辑器。我想你应该使用&lt; climits&gt;
答案 1 :(得分:0)
它是一个崇高的控制台&#34;错误&#34;。这是因为你永远不会终止最后一次编译。例如。
#include <iostream>
int main(){
cout << "it's a program" << endl;
cin.get() // system pause
}
第一次运行时,编译成功,但是,当您调用cin.get()
暂停时,程序永远不会终止,并保持打开状态。
然后,如果你再次尝试编译,你会看到权限错误,因为程序仍在运行。删除暂停命令,您就没有错误。