C++错误:“}”标记之前的预期主表达式

C++ error: expected primary-expression before ‘}’ token

本文关键字:表达式 错误 C++      更新时间:2023-10-16

我正在尝试调用一个名为 correction(original,corrected) 的 void 函数,当我尝试编译它时,我遇到了一些形式的错误:

错误:"}"标记之前的预期主表达式

这是我的完整代码:

    #include <cstdio>
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <string>
    using namespace std;
    void correction(ifstream& original,ofstream& corrected);
    int main ()
    {
      ifstream original;
      ofstream corrected;
      char filename[16];
      cout<<"Enter filename:n";
      cin>>filename;
      original.open(filename);
      corrected.open("corrected.txt");
      if (original.fail( ))
        {
    cout << "Input file opening failed.n";
          exit(1);
        }
    if (corrected.fail( ))
      {
        cout << "Input file opening failed.n";
        exit(1);
      }
     else
       {
         correction(original,corrected);
}
 return 0;
}
void correction(ifstream& original,ofstream& corrected)
{
char symbol;
while(! original.eof())
  {
    original.get(symbol);
    if (symbol== 'c')
{
     corrected.put(symbol);
     original.get(symbol);
     if (symbol=='i')
       {
         corrected.put(symbol);
         original.get(symbol);
         if (symbol=='n')
           {
             corrected.put(symbol);
             original.get(symbol);
while (symbol==' ')
                 {
                   original.get(symbol);
                     }
             for (symbol=='<')
               {
                 corrected.put('>');
                 original.get(symbol);
               }
             corrected.put(symbol);
           }
}
     if (symbol=='o')
       {
         corrected.put(symbol);
         original.get(symbol);
         if (symbol=='u')
           {
             corrected.put(symbol);
             original.get(symbol);
             if (symbol=='t')
               {
                 corrected.put(symbol);
                original.get(symbol);
                 while (symbol==' ')
                   {
                     original.get(symbol);
                   }
                 for (symbol=='>')
                   {
                     corrected.put('<');
                     original.get(symbol);
                   }
                 corrected.put(symbol);
               }
           }
       }
   }
 else
   corrected.put(symbol);
  }
 return;
}

当我尝试编译此代码时,出现以下错误:

运算符.cpp:59:23:错误:在"("标记之前应使用";" for (symbol=='<'( ^ 运算符.cpp:65:5:错误:"}"标记之前的预期主表达式 } ^ 运算符.cpp:65:5:错误:在"}"标记之前预期"(">>运算符.cpp:65:5:错误:"}"之前的预期主表达式 令 牌 运算符.cpp:65:5:错误:"}"标记之前应为";" 运算符.cpp:83:20:错误:在"("标记之前应使用";" 对于(符号=='>'( ^ 运算符.cpp:89:9:错误:"}"标记之前的预期主表达式 } ^ 运算符.cpp:89:9:错误:在"}"之前预期"("标记运算符.cpp:89:9:错误:"}"之前的预期主表达式 令牌运算符.cpp:89:9:错误:在"}"令牌之前应为";">

我对编程有点陌生,花了几个小时试图修复它,但我不明白问题是什么。

非常感谢任何形式的帮助!

后来在仔细查看@liup的回答后添加:

哎哟,我的错,OP可能确实打算在这里使用循环!然后,您可以像这样使用 while 循环:

while (symbol=='<')

while (symbol=='>')

旧答案:

这里:

if (symbol=='<')

在这里:

if (symbol=='>')

而不是for (symbol=='<')for (symbol=='>').

该错误源于这样一个事实,即在 for 循环中,您必须拥有所有三个子句,即使它们是空的,因此两个分号;是必需的。您

只提供了一个没有在两个不正确的for语句中的每一个中提供单个分号。

有关参考,请参阅 cpp 首选项中的循环说明

循环

语法的for (symbol=='<')for (symbol=='>')都是错误的。在此方案中,您可以按如下方式使用 for 循环。

for (; symbol == '<';)
{
    corrected.put('>');
    original.get(symbol);
} 
for (; symbol == '>';)
{
    corrected.put('<');
    original.get(symbol);
}

for (; symbol == '<';original.get(symbol))
{
    corrected.put('>');
} 
for (; symbol == '>';original.get(symbol))
{
    corrected.put('<');
}