gpt4 book ai didi

c++ - 如何解决对自己的C++成员函数的 undefined reference ?

转载 作者:行者123 更新时间:2023-11-28 01:46:30 31 4
gpt4 key购买 nike

我已经编写了用于将句子拆分为单词的函数,但是在我想使用它之后出现了问题。主窗口.cpp :

#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;
}

主窗口.h

#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

这里是错误:

undefined reference to MainWindow::split(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)

最佳答案

您在 MainWindow 中声明一个成员函数然后使用它,但是您定义:

vector<string> split(const string s)

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

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

不过,更好的解决方案是在 MainWindow 类之外声明 split(它与 MainWindow 无关,它只是一个有用的小工具函数) , 并保留定义。

我还将参数更改为 const string& s,以节省复制字符串的麻烦(我同意 Bathsheba 的观点——使用 std::unique_ptr 来处理删除)。

关于c++ - 如何解决对自己的C++成员函数的 undefined reference ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44845556/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com