s1 之前的预期主令牌

expected primary token before s1

我是qt creator的新手。 gui.cpp

有错误

24: error: expected primary-expression before 's1' n=string1::len(QString s1);

gui.cpp

#include "gui.h"
#include "ui_gui.h"
#include "string1.h"

gui::gui(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::gui) {
    ui->setupUi(this); }

gui::~gui() {
    delete ui; }

void gui::on_pushButton_clicked() {
    QString q1;
    string1 *s1;
    int n;
    q1=ui->lineEdit->text();
    s1=new string1(q1);
    n=string1::len(QString s1);
    ui->lineEdit_2->setText(q1); }

gui.h

#ifndef GUI_H
#define GUI_H

#include <QMainWindow>
#include<string1.h> namespace Ui { class gui; }

class gui : public QMainWindow {
    Q_OBJECT

public:
    explicit gui(QWidget *parent = 0);
    ~gui();

private slots:
    void on_pushButton_clicked();

private:
    Ui::gui *ui; };

#endif // GUI_H

string1.cpp

#include<string1.h>

string1::string1(QString q1) {
    q=q1; } string1::string1() {
    q=" "; }

int string1::len(QString *s) {
    int i=0;
    while(s[i]!=0)
    {
        i++;
    }
    i--;
    return i; }

string1.h

#ifndef STRING1_H
#define STRING1_H

#include<qstring.h>
#include<gui.h>


class string1 {
    QString q;

public:
    friend class gui;
    string1 *s1;
    string1();
    string1(QString q1);
    int len(QString *s);

};

#endif // STRING1_H

错误是由n=string1::len(QString s1);引起的,它是参数列表中QString s1的声明。您可能从 string1.cpp 复制了函数声明,将参数名称更改为参数名称,但忘记删除类型。但它仍然无法正常工作,因为 string:::len 不是 static.

确定需要s1动态分配吗?它是局部变量,您在函数结束前忘记了 delete。如果您使用动态分配的 string1 只是为了将其传递给 string1::len 避免复制,google C++ 引用。