为啥我会收到错误错误 C2664:'reverseString'

Posted

技术标签:

【中文标题】为啥我会收到错误错误 C2664:\'reverseString\'【英文标题】:Why do i get error error C2664: 'reverseString'为什么我会收到错误错误 C2664:'reverseString' 【发布时间】:2014-07-14 03:50:25 【问题描述】:
#include <iostream> 
#include <string> 
#include <iomanip> 

using namespace std;

typedef char string80[81];      // create a synonym for another type 
void reverseString(string80);       // function prototype 
int main()
            
  // start program compilation here 
  char string80, name;          // variable to contain the name of the user 

  cout << "Enter your name =====> " ;
  cin >> name,81; 

  cout << "\n\nWelcome to Computer Science 1106 " << name << endl<< endl; 

  reverseString(name);

  cout << "Your name spelled backwards is " << name << endl << endl; 

  return 0;
 // end function main 
  // Function to reverse a string 
  // Pre: A string of size <= 80 Post: String is reversed 

void reverseString(string80 x)
 
  int last = strlen(x)- 1;  // location of last character in the string 
  int first = 0;        // location of first character in the string 
  char temp;  

  // need a temporary variable 
  while(first <= last)
   // continue until last > first 

    temp = x[first];      // Exchange the first and last characters
    x[first] = x[last];         
    x[last] = temp; 
    first++;        // Move on to the next character in the string
    last--;             // Decrement to the next to last character in the string
  // end while 
// end reverseString 

我收到一个错误

C2664: 'reverseString' : 无法将参数 1 从 'char' 转换为 'char []' 从整数类型转换为指针类型需要 reinterpret_cast、C-style cast 或 function-style cast

【问题讨论】:

您的意思是string80 name; 而不是char string80, name;? PS你可以使用std::stringstd::reverse标准函数。 还有cin &gt;&gt; name,81; ? 另外,cin &gt;&gt; name,81; 失败了,你的意思是cin &gt;&gt; setw(81) &gt;&gt; name; 【参考方案1】:

reverseString 函数接受 char [81] 作为 x 参数,但您在调用它时向它发送 char

您可能想要做的是将string80name 声明为char [81] 而不是char

char string80[81], name[81]; 

【讨论】:

【参考方案2】:

您将name 声明为char 类型,而应将其键入为string80(来自您的typedef)。

您还无意中通过声明 char string80 隐藏了您的 typedef,这将 typedef 隐藏在周围的范围之外。

您想将name 声明为string80 类型,而不是char 类型。像这样的:

string80 name; 

【讨论】:

以上是关于为啥我会收到错误错误 C2664:'reverseString'的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到错误数量的参数错误?

为啥我会收到错误的文件描述符错误?

为啥我会收到此错误

我不知道为啥我会收到分段错误错误

为啥我会收到错误消息?

为啥我会收到 Laravel Composer 解析错误?