我正在制作一个arduino程序。我使用avr-g + 4.9.2和here的STL。
我有一堂课鸡尾酒。我希望Cocktail类型的所有对象都能够访问指针向量。这些指针指向Alcohol类型的对象。看到这个指针向量对于Cocktail的每个实例都是相同的,我想让它成为静态的。但是如果我将它们设置为静态,那么我的程序将无法编译。这是代码:
Ineb.hpp
class Alcohol
{
private:
float flow_rate_;
Pump * which_pump_;
public:
std::string this_alcohol_;
Alcohol(std::string this_alcohol, float flow_rate);
Alcohol(std::string this_alcohol, float flow_rate, Pump which_pump);
float HowLong(float percentage_of_drink, uint8_t drink_size); //How long in seconds the pump should be on
void ChangeByteToRegister(uint8_t& byte_to_register);
};
class Cocktail
{
private:
bool order_matter_;
uint8_t byte_to_register_;
static std::vector<Alcohol*> alcohol_directory_;
public:
static void test(Alcohol *ba) {alcohol_directory_.push_back(ba);} //STATIC KEYWORD HERE
Cocktail(bool ordr_matter);
std::vector<std::string> GetIngredients(const uint8_t& num_ingredients, PGM_P& string_table);
uint8_t GetByteToRegister();
void MakeDrink(const uint8_t& num_ingredients, PGM_P& string_table);
};
的main.cpp
#include "src/Ineb.hpp"
#include "src/Pins.hpp"
#include "ingredients.h"
#include <pnew.cpp>
extern "C" void __cxa_pure_virtual() {
for(;;);
}
int main(void) {
init();
setup();
Ineb::Pump A(1,8);
Ineb::Alcohol Vodka("vodka", 2.5, A);
Ineb::Cocktail::test(&Vodka);
for(;;)
loop();
return 0; // not reached
}
未定义的引用`Ineb :: Cocktail :: alcohol_directory_'
我很困惑为什么当我带走静态时这会编译。在幕后做什么是静态的?
答案 0 :(得分:1)
static
类成员。
有线
std::vector<Alcohol*> Cocktail::alcohol_directory_;
<{1>}中的会做到。