2011-04-14 141 views
0

好的,我想解释我在代码之前要做的事情。我正在创建一个学生记录系统。我试图从文本文件中将信息提取到记录系统中。我试图在堆上使用数组存储信息。错误:功能太少的参数`void alpha(std :: string *,student)'

我主要关注前几个错误,因为我觉得那些会导致下面的错误。任何帮助将不胜感激,因为我浏览过许多论坛,他们没有带领我走向正确的方向。提前致谢!

代码:

#include "address.h" 
#include "student.h" 
#include "date.h" 
#include "record.h" 
#include "name.h" 

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstdlib> 

#define pArray 
#define students 
#define Request 

using namespace :: std; 



enum {sNUMBER=50}; 

//Function Prototypes 
void tPrint(string*,student pArray); 
void sPrint(string*,student pArray); 
void alpha(string*,student pArray); 
int generate(); 
//Function Definitions 
void tPrint(string*,student pArray, alpha) 
{ 
    if (alpha != 0) 
    { 
     alpha(pArray); 
    }//end if 
    int i; 
    for (i=0; i<sNUMBER;i++) 
    { 
     pArray->tPrint(); 
     pArray+=1; 
    }//end for 
};//end tPrint 
void sPrint(string*,student pArray) 
{ 
    if (alpha != 0) 
    { 
     alpha(pArray); 
    }//ennd if 
    int i; 
    for (i=0; i<sNUMBER;i++) 
    { 
     pArray->sPrint(); 
     pArray+=1; 
    }//end for 
};//end sPrint 
void alpha(string*,student pArray) 
{ 
    int i;//counter 
    int j;//counter 
    for (i=0;i<sNUMBER-1;i++) 
    { 
     for (j=0;j<sNUMBER-1-i;j++) 
     { 
      //combine first and last names into full names 
      if (strcmp((pArray->GetsName().GetfName())+=" " +=(pArray->GetsName().GetlName()),((pArray+1)->GetsName().GetfName())+=" "+=((pArray+1)->GetsName().GetlName()))>0) 
      { 
       swap(pArray[j],pArray[j+1]); 
      } 
     }//end for 
    }//end for 
};//end alpha 

int generate() 
{ 
    srand(sNUMBER); 
    ofstream data; 
    data.open ("data.txt"); 
    if (data.is_open()) 
    { 
     int i; // counter 
     int j; // counter 

     //Name info 
     string new fName[sNUMBER]; 
     string new lName[sNUMBER]; 
     //Address info 
     string new add1[sNUMBER]; 
     string new add2[sNUMBER]; 

     //variables to generate names 
     string new fName1[5] = {"Alfred","Robert","Ryan","Hank","Richard"}; 
     string new fName2[5] = {"Hannah","Lacie","Crystal","Kayce","Susan"}; 
     string new lName1[5] = {"Smith","Jones","Allison","Johnson","Moore"}; 
     string new lName2[5] = {"Howard","Williams","Pinkston","Cooley","Vernon"}; 
     string new fNames[2] = {fName1,fName2}; 
     string new lNames[2] = {lName1,lName2}; 

     // variables to generate addresses 
     string new adds1[5] = {"159 faternity st.","399 Dorm Blvd.","222 faternity st.", "777 Dorm Blvd", "82 Canal street"}; 
     string new adds2[10] = {"Apartment A", "Apartment B", "Apartment C", "Apartment D", "Apartment E","Apartment F", "Apartment G", "Apartment H", "Apartment I"}; 

     for (i=0;i<sNUMBER;i++) 
     { 
      for (j=0; j<5; j++) 
      { 
       strCopy(fName[i],fNames[i>25][j]); 
       strCopy(lName[i],lNames[i>25][j + floor(i/5)-(i>25)*(floor(i/5)-6)- 4*((j+i/5)>5)]); 

      } 
     } 





     for (i=0;i<sNUMBER;i++) 
     { 
      for (j=0; j<10; j++) 
      { 
       strCopy(add1[i],adds1[j]); 
       strCopy(add2[i],adds2[j + floor(i/10)-(i>25)*(floor(i/10)-11)- 4*((j+i/10)>10)]); 

      } 
     } 


     //deallocate unneeded variables 
     delete [] fName1; 
     delete [] fName2; 
     delete [] lName1; 
     delete [] lName2; 
     delete [] fNames; 
     delete [] lNames; 

     for (i=0; i<sNUMBER;i++) 
     { 
      // name info 
      Data << fName[i] << "\n"; // first name 
      Data << lName[i] << "\n"; // last name 
      // address info 
      Data << add1[i] <" \n"; // add 1 
      Data << add2[i] <" \n"; // add 2 
      Data << "Indianapolis \n"; // city 
      Data << "IN \n"; // state 
      Data << "46168 \n"; // zip 
      // birthdate 
      Data << rand()%28 + 1 << " \n"; //day 

      Data << rand()%12 + 1 << " \n";//month 
      Data << 2011 -(rand()%49 + 12)<< "\n";//year 
      //graddate 
      Data << rand()%28 + 1 << " \n";//day 

      Data << rand()%12 + 1 << " \n"; // month 
      Data << 2011 + (rand()%6+2)<< " \n"; // year 
      //performance info 
      Data << (rand()%16)/(float rand()%4)<<" \n"; //gpa 
      Data << (rand()%300)<< " \n"; //credits 

     } 

     //Deallocate rest of memory 
     delete [] fName; 
     delete [] lName; 
     delete [] add1; 
     delete [] add2; 


     data.close(); 
    } 
    else 
    { 
     cout << "Your file did not open. Sorry \n"; 
    } 
    return 0; 
}//end generate} 

下面是错误:

C:\Users\main.cpp||In function ‘void tPrint(std::string*, student)’:| 
C:\Users\main.cpp|25|error: too few arguments to function ‘void alpha(std::string*, student)’| 
C:\Users\main.cpp|32|error: at this point in file| 
C:\Users\main.cpp|37|error: expected primary-expression before ‘->’ token| 
+0

请花时间适当地格式化问题中的代码(使用“{}”编辑器控件)。 – 2011-04-14 20:37:01

+0

我不确定发生了什么事。我会再试一次。 – CPlusPlusBeginner 2011-04-14 20:38:34

+0

接下来,阅读错误。你得到“函数... alpha的参数太少”的原因是因为你声明了,然后用两个参数定义它并用一个参数调用它。如果纠正这些导致进一步的问题,请回来向我们询问这些问题。 – 2011-04-14 20:41:53

回答

0

你真的需要一个教程或介绍文字上的C++。有很多错误,我不知道从哪里开始... #define在文件的开始是没有意义的(你打算如何?真正的效果是,预处理器将丢弃这些词),你不应该通过指针处理字符串(传递引用,如果可能的话常量引用),你是声明一个tPrint函数有两个参数,而定义一个不同的tPrint重载与三个,最后一个是不正确的,因为alpha不是一种类型。第一和第二个参数(预处理后取代)是无名的,使他们不能使用...

和所有的获得到代码的第一个实际前行......

+0

我同意在C++上找到额外的文本,因为这是有史以来最棘手的事情之一。在过去的4个月中,我几乎没有任何帮助,从字面上教我自己这些东西。因此,为什么我的代码看起来很可怕。我再次感谢你们所有人带来的一切。我会研究这些并继续。 – CPlusPlusBeginner 2011-04-14 21:02:39

0

的错误是:参数太少以功能void alpha(std::string*, student)。 当我们在你输入的代码中查找时:alpha(pArray);。 但函数签名是:void alpha(string*,student pArray);

所以传递一个字符串作为参数,将修复该错误,但是也有很多的代码中的其他事不对人:

  • 无效t打印(字符串*,学生粒子阵列,alpha)什么是阿尔法?我只看到一个空的定义
  • string new fName [sNUMBER]; 不会编译。我想你的意思是string* name = new fName[sNUMBER];什么是fName?
  • 还有很多奇怪的事情...

也许C++教程更适合你:see here

+0

好的,我知道我在新线路上做了错误的事情。 fName是我的name.cpp文件中定义的名字的缩写版本。 – CPlusPlusBeginner 2011-04-14 21:00:45

1

1)在你的代码中的3个#define可能是完全错误的

#define pArray 
#define students 
#define Request 

尤其是“pArray”,因为您稍后将其用作参数名称。

2)你正在比较一个函数与零。这没有意义,因为测试总是会成功的。

if (alpha != 0) 
{ 
    alpha(pArray); 
}//end if 

编辑︰等待,我看到有一个(不正确宣布)参数“隐藏”全球名称“alpha”。那么,这显然不能工作,因为参数没有名称(“alpha”实际上是类型)。

3)正如David Thornley在评论中已经指出的那样,你尝试用一个参数来调用该函数,这显然不起作用,因为你用两个参数声明了它。 (其实你不带参数调用它的一切,因为粒子阵列的#define将“扩大”到空字符串)

4)您尝试使用声明变量的语法是完全错误

string new fName[sNUMBER]; 

我甚至不知道那是应该是

而且有可能是这么多......

+0

我同意pArray等的#define是错的。我开始寻找精彩的网络,并提出了这个问题。感谢您的信息。我会考虑所有这一切。 – CPlusPlusBeginner 2011-04-14 20:59:27

0

你的大问题是#define秒。你正在做的是定义标识符,从字面上看,什么都没有。哪里有pArray,现在什么都没有。在C++中,以#开头的任何行都是预处理器命令,这意味着它对程序的文本进行操作。为了实际定义一个标识符,你只需要描述它。

您正在使用pArray作为函数参数,这意味着它没有出现在外部范围。如果预处理器的行为与C++的其他部分一样,那么这将是无害的,但它只是进行文本替换。您可能希望让编译器在您未定义某些内容时告诉您。

另一个问题是“太少的论点”。您声明alpha有两个参数,但只有在tPrint中提前调用它时才会传递一个参数。

我不打算通过其余的错误,直到你解决你的问题。一旦你删除了#define并自己仔细阅读其他错误。

+0

谢谢你的帮助。我不指望任何人对所有这些问题进行排序,因为这是我的问题。希望这足以让我开始并继续。 – CPlusPlusBeginner 2011-04-14 21:07:15