我尝试使用vector<int> myVector2
,但是,我无法在static function (foo)
上使用它。我使用Qt,这是下面的默认代码:
Mainwindow.h
---------------------------------------------------
#include <QMainWindow>
#include <vector>
#include <iostream>
#include <QString>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
static std::vector<int> myVector2;
static void foo();
private:
Ui::MainWindow *ui;
};
.....
mainwindow.cpp
------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
foo;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::foo(){
MainWindow::myVector2.push_back(3);
}
我刚刚将static std::vector<int> myVector2;
static void foo();
添加到标题和void MainWindow::foo(){
MainWindow::myVector2.push_back(3); }
上面的代码中。当我编译它时,我得到了这样的错误:
mainwindow.o: In function `MainWindow::foo()':
mainwindow.cpp:(.text+0xe7): undefined reference to `MainWindow::myVector2'
mainwindow.cpp:(.text+0xee): undefined reference to `MainWindow::myVector2'
mainwindow.cpp:(.text+0x10e): undefined reference to `MainWindow::myVector2'
mainwindow.cpp:(.text+0x126): undefined reference to `MainWindow::myVector2'
collect2: error: ld returned 1 exit status
make: *** [ddd] Error 1
14:46:36: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project ddd (kit: Desktop)
When executing step 'Make'
如果我在向量和函数之前移除static
,那么它编译得很好但我希望这两个可以直接访问。
如何修复上述代码?
答案 0 :(得分:3)
添加
std::vector<int> MainWindow::myVector2;
到mainwindow.cpp。
顺便说一句:
此
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
foo;
}
可能应该是:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
foo(); // <- note () here;
}
答案 1 :(得分:1)
将此添加到mainwindow.cpp:
std::vector<int> MainWindow::myVector2;
在static myVector2
课程中声明MainWindow
时,这是一种前瞻性声明。您需要在.cpp文件中创建一个变量才能使其正常工作。
答案 2 :(得分:1)
你需要定义那个向量,把它放在实现文件(.cpp)中的类声明之外:
std::vector<int> MainWindow::myVector2;