C ++语法问题

时间:2009-07-29 18:33:12

标签: c++

我需要帮助解决我遇到的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。]

3 个答案:

答案 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;
并根据您的需要添加其他人。

边注, consts总是比C ++中的define更受欢迎。

所以 const float RANGE = 15.0 始终优于 #define RANGE 15.0

有关解释和更多有用的C ++技巧,请参阅Effective C++