我无法弄清楚C++语法错误"expected `;' before ‘{’ token"

I can't figure out C++ syntax error "expected `;' before ‘{’ token"

本文关键字:before token expected 弄清楚 C++ 语法 错误      更新时间:2023-10-16

我有这个简单的代码,我得到一个语法错误:

file.cc:67: error: expected `;' before ‘{’ token
file.cc:73: error: expected primary-expression before ‘(’ token
file.cc:73: error: expected primary-expression before ‘n’
file.cc:73: error: expected `;' before ‘{’ token

我在67和73行周围画上了星号,这是类的构造函数。我是c++的新手,找不到语法问题。这是我第一次创建构造函数。

int main() {
  class Patient {
    private: // default is private but stating explicitly here for learning purposes
        std::string name; //object
        int height; //object
        int weight; //object
    public:
        Patient(); //constructor
        Patient(std::string); //constructor
        void set_name (std::string n) {name=n;} //fn
        void set_height (int h) {if (height>0){height=h;} else {height=0;}} //fn
        void set_weight (int w) {if (weight>0){weight=w;} else {weight=0;}} //fn
        std::string get_name(){return name;} //fn
        int get_height(){return height;} //fn
        int get_weight(){return weight;} //fn
        int bmi(void) {
            if ((height!=0) && (weight!=0))
              return (weight/(height*height));
            else
              return 0;
        }
  };
  Patient::Patient () { // **LINE 67**
    name="string";
    height=0,
    weight=0;
  }
  Patient::Patient(std::string n) {name=n;height=0;weight=0;} // **LINE 73**
  Patient father("Andrew Nonymous");
  Patient mother("Ursula N. Known");
  Patient baby;
  //Father's height and weight are unknown.
  mother.set_name("Ursula N. Nonymous");
  mother.set_height(1.65);
  mother.set_weight(58);
  baby.set_height(0.495);
  baby.set_weight(3.4);
  std::cout << "Baby: " << baby.get_name() << " BMI: " << baby.bmi() << std::endl;
  std::cout << "Mother: " << mother.get_name() << " BMI: " << mother.bmi() << std::endl;
  std::cout << "Father: " << father.get_name() << " BMI: " << father.bmi() << std::endl;
  return 0;
}

如果你想在函数内部定义一个类,你必须在类定义中内联定义该类的每个方法。例如:

class Patient {
    private: // default is private but stating explicitly here for learning purposes
        std::string name; //object
        int height; //object
        int weight; //object
    public:
        Patient()
        {
             name="string";
             height=0;
             weight=0;
         }
};

既然你是c++的新手,我猜,虽然另一个答案会让你的代码编译你可能想尝试使用类头和实现文件的更标准的方式,这将让你习惯于有可重用的类,而不是类定义在main()(或其他函数)

只需将类声明移动到一个名为"Patient.h"的文件中,并将实现(函数的定义)移动到"Patient.cpp"。在主文件和Patient.cpp中,包括Patient.h

这里有一个病人。h:

#ifndef Patient_h
#define Patient_h
#include <string>
class Patient {
private: // default is private but stating explicitly here for learning purposes
    std::string name; //object
    int height; //object
    int weight; //object
public:
    Patient(); //constructor
    Patient(std::string); //constructor
    void set_name (std::string n) {name=n;} //fn
    void set_height (int h) {if (height>0){height=h;} else {height=0;}} //fn
    void set_weight (int w) {if (weight>0){weight=w;} else {weight=0;}} //fn
    std::string get_name(){return name;} //fn
    int get_height(){return height;} //fn
    int get_weight(){return weight;} //fn
    int bmi(void) {
        if ((height!=0) && (weight!=0))
            return (weight/(height*height));
        else
            return 0;
    }
};
#endif

Patient.cpp:

#include "Patient.h"
Patient::Patient () {
    name="string";
    height=0;
    weight=0;
}
Patient::Patient(std::string n) {name=n;height=0;weight=0;}

main.cpp:

#include <iostream>
#include "Patient.h
int main() {
    Patient father("Andrew Nonymous");
    Patient mother("Ursula N. Known");
    Patient baby;
    //Father's height and weight are unknown.
    mother.set_name("Ursula N. Nonymous");
    mother.set_height(1.65);
    mother.set_weight(58);
    baby.set_height(0.495);
    baby.set_weight(3.4);
    std::cout << "Baby: " << baby.get_name() << " BMI: " << baby.bmi() << std::endl;
    std::cout << "Mother: " << mother.get_name() << " BMI: " << mother.bmi() << std::endl;
    std::cout << "Father: " << father.get_name() << " BMI: " << father.bmi() << std::endl;
    return 0;
}

如果你在IDE中工作,它会为你编译main.cpp和Patient.cpp;如果您在命令行中使用g++或clang,请确保在编译时包含两个。cpp文件,例如

$ g++ main.cpp Patient.cpp -o myPatientProgram

…然后你可以运行。/myPatientProgram来查看你的程序运行情况。

hth

相关文章: