可能重复:
C++:对静态类成员的未定义引用
我的目标是制作一个可以容纳对象的容器对象。我决定使用指针向量来做到这一点。
除了容器对象,还有一个抽象基类,它有一个函数 print。这是一个虚函数,因为派生类将能够覆盖该函数。最后我从这个派生类创建一个对象并尝试将它存储在容器中。
下面是包含抽象类定义的头文件
元素.h
#ifndef ELEMENT_H
#define ELEMENT_H
using namespace std;
//Abstract class with pure virtual functions
class Element{
public:
virtual void print()=0;
};
#endif
下面我正在尝试为容器创建一个模板类。连同成员函数来操作容器,如反转顺序、打印等。
元素.h
#include <vector>
#include <Element.h>
using namespace std;
//Creating a class which will hold the vector of pointers
class Elements{
public:
static vector<Element*> elements;
static void addElement(Element*e){
elements.push_back(e);
}
static unsigned int size() {
return elements.size();
}
static void print_all() {
for (int i=0;i<elements.size();i++){
elements[i]->print ();
}
}
static void reverse(){
int i=0;
int j=elements.size()-1;
while(!(i==j)&&!(i>j)){
Element*temp;
temp=elements[i];
elements[i]=elements[j];
elements[j]=temp;
i++;
j--;
}
}
};
下面我将创建一个抽象类 Element 的实例以及一些成员函数。我正在尝试构建的容器将容纳这种对象。
伊赫
#include <iostream>
#include <istream>
#include <ostream>
#include <vector>
#include <Element.h>
using namespace std;
class I:public Element{
int myInteger;
public:
I();
I(int);
void setI(int);
int getI(void);
void print();
};
I::I(int inInteger){
setI(inInteger);}
void I::setI(int inInteger){
myInteger=inInteger;
}
int I::getI(){
return myInteger;
}
void I::print(){
cout<<"\nThe value stored in the Integer:"<<getI();
}
下面我尝试创建类型 I 的对象。在其中输入一个值,获取其输出。然后将它们“推”入容器中。主文件
#include <iostream>
#include <istream>
#include <ostream>
#include <vector>
#include "Element.h"
#include "I.h"
#include "Elements.h"
using namespace std;
int main() {
int userInt;
Element*element;
cout<<"enter an integer";
cin>>userInt;
element = new I(userInt);
element->print();
Elements::addElement(element);
Element*element2;
cout<<"enter an integer";
cin>>userInt;
element2=new I(userInt);
element2->print();
Elements::addElement(element2);
Elements::print_all();
Elements::reverse();
int i=Elements::size();
cout<<i;
}
我正在使用 Codeblocks 10.05 进行编译,使用 gcc GNU 编译器。当我构建上面的 main.cpp 时,它给了我错误:'undefined reference to 'Elements::elements' in Elements.h in each funcions: addElement,size,....etc
这是我第一次在这个论坛上发帖。非常欢迎任何帮助和/或评论。