s1之前的预期主令牌

时间:2015-03-21 18:08:08

标签: c++ qt qt-creator

我是qt创作者的新手。 gui.cpp中有错误

  

24:错误:在's1'之前预期的primary-expression        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

1 个答案:

答案 0 :(得分:0)

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

确定您需要动态分配delete吗?它是本地变量,你在函数结束前忘了string1。如果您使用动态分配的string1::len只是为了将其传递给{{1}}以避免复制,请使用Google C ++参考。