Чтобы получить то, что вы хотите (=sum(repeatuniqueformula(sum(if(randbetween(1,100) > subtotal(1,L23), 0, 1)), x))
), вам нужно создать пользовательскую функцию с помощью Google Apps Script, но x
следует заменить числом или ссылкой на ячейку, имеющую значение или формула, которая возвращает это значение.
Ссылки
При определении шаблона в .cpp файле необходимо явно инстанцировать его со всеми типами / шаблонные параметры, известные, шаблон будет использоваться заранее как это (поместите его в .cpp файл):
template class TreeNode<Player>;
Если Вы не знаете, с которыми шаблонными параметрами будет использоваться шаблон, необходимо поместить все определения в заголовок. как
template<typename T>
class TreeNode {
public:
TreeNode() /* now, also put the code into here: */ { doSomething(); }
};
Причина состоит в том, что, когда Вы собираетесь использовать шаблон от где-нибудь, компилятор должен смочь сгенерировать код для того определенного инстанцирования шаблона. Но если Вы помещаете код в .cpp файл и компилируете его, нет никакого пути к компилятору для доставления код для генерации инстанцирования (кроме тех случаев, когда использование печально известного export
ключевое слово, которое только поддерживается очень немногими компиляторами).
Это - также запись в моем ответе Ловушек C++: Каких ловушек C++ я должен избежать?
Хорошо Вы объявляете ~TreeNode (), но Вы определяете его?
Когда Вы объявляете деструктор, Вы мешаете компилятору генерировать один для Вас, но необходимо определить его где-нибудь, даже если это пусто.
Если Ваше намерение состояло в том, чтобы иметь пустой деструктор, у Вас есть две опции:
- Удалите объявление ~TreeNode () полностью и полагайтесь сам, сгенерированный деструктор - Определяет его как пустой. Inling был бы очень хорош здесь, IE. ~TreeNode () {};
Компилятор жалуется на не нахождение реализации деструктора. Как указано прежде, если Вы действительно объявляете деструктор, компилятор автоматически не генерирует один для Вас.
К предложению David Reis или удаления или обеспечения пустого деструктора, я ясно пошел бы для второго. Если Ваш класс предназначен, чтобы быть полученным (у Вас есть виртуальные методы), затем, необходимо обеспечить виртуальный деструктор, даже если это пусто (то же относится к BaseNode).
Если Вы будете зависеть от сгенерированной версии компилятора, и пользовательский код удаляет производный объект через указатель на базовый класс, конструктор которого не является виртуальным затем, то деструктор производного объекта не назовут, возможно пропуская ресурсы.
Вы забываете связывать объектный файл, содержащий тела функции для Ваших функций класса?
Например, у Вас было бы что-то вроде этого в .cpp:
TreeNode::TreeNode() :
/* initializers here */
{
// ...
}
TreeNode::~TreeNode()
{
// ...
}