我需要帮助解决我遇到的c ++语法问题。
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <fstream>
#include <stdlib.h>
#define RANGE 15.0
#define NUMBINS 15
struct _freq
{
float ini, end;
int q;
};
typedef _freq freq;
vector<freq> alphaCutoffSelector(vector<atom> A,string _i,string _j,float r=RANGE,
int b=NUMBINS);
vector<freq> alphaCutoffSelector(vector<atom> A,string _i,string _j,float range,
int bins)
{
vector<freq> F;
freq *f;
double D;
for (int i=0;i<bins;i++)
{
f=new freq;
f->ini=i*(range/bins);
f->end=f->ini+range/bins;
f->q=0;
F.push_back(*f);
}
for(int i=0;i<A.size();i++)
{
for (int j=0;j<A.size();j++)
{
for(int k=0;k<bins;k++)
{
if(i!=j && A[i].getResName()==_i &&
A[j].getResName()==_j && A[i].getAtomName()=="CA" &&
A[j].getAtomName()=="CA")
{
D = (A[j].getX()-A[i].getX())*(A[j].getX()-A[i].getX()) + (A[j].getY()-A[i].getY())*(A[j].getY()-A[i].getY()) + (A[j].getZ()-A[i].getZ())*(A[j].getZ()-A[i].getZ());
if (D > (k*range/bins)*(k*range/bins) && D <= ((k+1)*range/bins)*((k+1)*range/bins))
{
F[k].q=F[k].q+1;
}
}
}
}
}
return F;
}
vector<freq> C;
string RN[] = {"ALA","ARG","ASN","ASP","CYS","GLU","GLN","GLY","HIS","ILE","LEU","LYS","MET","PHE","PRO","SER","THR","TRP","TYR","VAL"};
int i,j;
for (i=0;i<20;i++)
{
for (j=0;j<20;j++)
{
if (i<=j)
{
C=alphaCutoffSelector(atoms,RN[i],RN[j]);
cout <<RN[i] <<"-" <<RN[j];
for (int n=0;n<NUMBINS;n++)
{
cout <<" " <<C[n].q;
}
cout << endl;
C.clear();
}
}
}
return 0;
}
尝试使用g ++ -c try.cc编译它会导致以下错误消息:
try.cc:1:错误:期望的构造函数, 析构函数,或类型转换之前 '&LT;'令牌。
我该怎么办?
[我试过 - Ed。]
答案 0 :(得分:11)
我怀疑你应该写std::vector
。编译器看到它不理解的符号(即向量)并尝试将其视为构造函数/析构函数/ ....
答案 1 :(得分:3)
您的第一个问题是没有声明std lib的命名空间:
using namespace std;
答案 2 :(得分:2)
我猜你在不包括std namespace
时遇到了问题。
您可以在其中添加 using namespace std
,但是
头文件中的using namespace std
不是一个好主意,而是你可以做到的
using std::cout;
using std::cin;
using std::endl;
using std::vector;
并根据您的需要添加其他人。
所以 const float RANGE = 15.0
始终优于 #define RANGE 15.0
。
有关解释和更多有用的C ++技巧,请参阅Effective C++