如何解决对自己的C ++成员函数的未定义引用?

时间:2017-06-30 11:37:01

标签: c++ qt

我已经编写了将句子分成单词的功能,但是在我想要使用它之后出了点问题。 mainwindow.cpp:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

mainwindow.h

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qdebug.h>
#include <vector>
#include <iostream>
using namespace std;
vector <QString> myvector;
vector<string>::iterator it;

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

void MainWindow::on_addButton_clicked()
{
    QString str = ui->textEdit->toPlainText();
    //qDebug() << str;
    vector<string> v = split(str.toStdString());
    for(int i = 0; i < myvector.size(); i++){
        ui->listWidget->addItem(myvector[i]);
    }

}

vector<string> split(const string s)
{
   vector<string> myvector;
   typedef string::size_type string_size;
   string_size i = 0;
   while (i != s.size()) {
      while (i != s.size() && isspace(s[i]))
         ++i;
      string_size j = i;
      while (j != s.size() && !isspace(s[j]))
         j++;
      if (i != j) {
         myvector.push_back(s.substr(i, j - i));
         i = j;
      }
   }
   return myvector;
}

这是错误:

  

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <vector> #include <iostream> using namespace std; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); std::vector<string> split(const string s); private slots: void on_addButton_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

的未定义引用

1 个答案:

答案 0 :(得分:2)

您在MainWindow中声明了一个成员函数,然后使用它,但您 define

vector<string> split(const string s)

这是一个独立的功能。可能最容易改为:

vector<string> MainWindow::split(const string s)

更好的解决方案是在split类之外声明MainWindow(它与MainWindow无关,它只是一个有用的litte实用函数),并保留单独的定义

我还要将参数更改为const string& s,以节省必须复制字符串(我同意Bathsheba - 使用std :: unique_ptr来处理删除)。