- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用单个头文件为一堆排序算法声明一堆子例程。当我尝试从我的 main.cpp 文件调用它们时,出现错误。我很困惑为什么,因为我已经在头文件中正确声明了我的函数,并且我已经在相应的 .cpp 文件中定义了它们。我已将头文件包含在我的两个 .cpp 文件中。这是我的代码:
排序算法.cpp
#include "SortingAlgorithms.h"
#include <cstdlib>
#include <iostream>
#include <vector>
#include <time.h>
#include <string>
using namespace std;
int listSize;
string listType;
int checkType(string listType)
{
if (listType == "int" || listType == "Int" || listType == "integer" || listType == "Integer")
{
return 1;
}
else if (listType == "doub" || listType == "Doub" || listType == "double" || listType == "Double")
{
return 2;
}
else if (listType == "char" || listType == "Char" || listType == "character" || listType == "Character")
{
return 3;
}
else if (listType == "string" || listType == "String" || listType == "str" || listType == "Str")
{
return 4;
}
}
template <typename E>
vector<E> generateList(string listType)
{
vector<E> list;
if (checkType(listType) == 1)
{
for (int i = 0; i < listSize; i++)
{
int random = rand() % 10001;
list.push_back(random);
}
}
else if (checkType(listType) == 2)
{
for (int i = 0; i < listSize; i++)
{
double random = (10000 * (double)rand() / (double)RAND_MAX);
list.push_back(random);
}
}
else if (checkType(listType) == 3)
{
for (int i = 0; i < listSize; i++)
{
char random = alphabet[rand() % (sizeof(alphabet) - 1)];
list.push_back(random);
}
}
else if (checkType(listType) == 4)
{
/*
string str;
for (int i = 0; i < listSize; i++)
{
int randomChar = rand() % (26 + 26 + 10);
if (randomChar < 26)
str += 'a' + randomChar;
else if (randomChar < 26 + 26)
str += 'A' + randomChar - 26;
else
str += '0' + randomChar - 26 - 26;
}
list.push_back(str);
*/
}
else
{
cout << "Invalid type\n";
exit(0);
}
return list;
}
template <typename E>
void printVector(vector<E>& list, string listType)
{
typename vector<E>::iterator it;
for (it = list.begin(); it != list.end(); it++)
cout << *it << " ";
}
template <typename E>
void insertionSort(vector<E>& list)
{
E i, j, tmp;
for (i = 1; i < list.size(); i++)
{
j = i;
tmp = list[i];
while (j > 0 && tmp < list[j-1])
{
list[j] = list[j-1];
j--;
}
list[j] = tmp;
}
}
template <typename E>
vector<E> merge(vector<E>& list, vector<E>& left, vector<E>& right)
{
vector<E> result;
unsigned left_it = 0, right_it = 0;
while(left_it < left.size() && right_it < right.size())
{
if(left[left_it] < right[right_it])
{
result.push_back(left[left_it]);
left_it++;
}
else
{
result.push_back(right[right_it]);
right_it++;
}
}
while(left_it < left.size())
{
result.push_back(left[left_it]);
left_it++;
}
while(right_it < right.size())
{
result.push_back(right[right_it]);
right_it++;
}
list = result;
return list;
}
template <typename E>
vector<E> mergeSort(vector<E>& list)
{
if(list.size() == 1)
{
return list;
}
typename vector<E>::iterator middle = list.begin() + (list.size() / 2);
vector<E> left(list.begin(), middle);
vector<E> right(middle, list.end());
left = mergeSort(left);
right = mergeSort(right);
return merge<E>(list, left, right);
}
template <typename E>
void shiftRight(vector<E>& list, int low, int high)
{
int root = low;
while ((root*2)+1 <= high)
{
int leftChild = (root * 2) + 1;
int rightChild = leftChild + 1;
int swapIndex = root;
if (list[swapIndex] < list[leftChild])
{
swapIndex = leftChild;
}
if ((rightChild <= high) && (list[swapIndex] < list[rightChild]))
{
swapIndex = rightChild;
}
if (swapIndex != root)
{
double tmp = list[root];
list[root] = list[swapIndex];
list[swapIndex] = tmp;
root = swapIndex;
}
else
{
break;
}
}
return;
}
template <typename E>
void heapify(vector<E>& list, int low, int high)
{
int midIndex = (high - low - 1)/2;
while (midIndex >= 0)
{
shiftRight(list, midIndex, high);
midIndex--;
}
return;
}
template <typename E>
void heapSort(vector<E>& list, int size)
{
heapify(list, 0, size - 1);
int high = size - 1;
while (high > 0)
{
double tmp = list[high];
list[high] = list[0];
list[0] = tmp;
high--;
shiftRight(list, 0, high);
}
return;
}
template <typename E>
int pivot(vector<E>& list, int first, int last)
{
int p = first;
E pivotElement = list[first];
for(int i = first+1 ; i <= last ; i++)
{
if(list[i] <= pivotElement)
{
p++;
E temp = list[i];
list[i] = list[p];
list[p] = temp;
}
}
E temp = list[p];
list[p] = list[first];
list[first] = temp;
return p;
}
template <typename E>
void quickSort(vector<E>& list, int first, int last)
{
E pivotElement;
if(first < last)
{
pivotElement = pivot(list, first, last);
quickSort(list, first, pivotElement-1);
quickSort(list, pivotElement+1, last);
}
}
template <typename E>
bool sort()
{
vector<E> list;
int again = 0;
cout << "How many items do you want to sort? (0 to quit)\n";
cin >> listSize;
if (listSize == 0)
exit(0);
else if (listSize < 0) {
cout << "Invalid input.\n";
exit(0);
}
int sort = 0;
cout << "Which sorting algorithm would you like to use?\n";
cout << " 1 for Insertion Sort\n 2 for Merge Sort\n 3 for Heapsort\n 4 for Quicksort\n";
cin >> sort;
cout << "\n";
printVector(list, listType);
cout << "\n\n";
if (sort == 1)
insertionSort(list);
else if (sort == 2)
mergeSort(list);
else if (sort == 3)
heapSort(list, listSize);
else if (sort == 4)
quickSort(list, 0, listSize - 1);
else {
cout << "Invalid command\n";
exit(0);
}
printVector(list, listType);
cout << "\n\n";
while (again == 0) {
cout << "Would you like to go again? (1 for yes, 2 for no)\n";
cin >> again;
if (again == 1)
return true;
else if (again == 2)
return false;
}
}
排序算法.h
#ifndef SORTING_ALGORITHMS_H_
#define SORTING_ALGORITHMS_H_
#include <iostream>
#include <vector>
#include <time.h>
#include <string>
using namespace std;
static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int checkType(string listType);
template <typename E>
vector<E> generateList(string listType);
template <typename E>
void printVector(vector<E>& list, string listType);
template <typename E>
void insertionSort(vector<E>& list);
template <typename E>
vector<E> merge(vector<E>& list, vector<E>& left, vector<E>& right);
template <typename E>
vector<E> mergeSort(vector<E>& list);
template <typename E>
void shiftRight(vector<E>& list, int low, int high);
template <typename E>
void heapify(vector<E>& list, int low, int high);
template <typename E>
void heapSort(vector<E>& list, int size);
template <typename E>
int pivot(vector<E>& list, int first, int last) ;
template <typename E>
void quickSort(vector<E>& list, int first, int last);
template <typename E>
bool sort();
#endif
main.cpp
#include "SortingAlgorithms.h"
#include <cstdlib>
#include <iostream>
#include <vector>
#include <time.h>
#include <string>
using namespace std;
int listSize;
string listType = "int";
int main(int argc, char** argv) {
srand(time(0));
vector<int> list = generateList<int>(listType);
printVector(list, listType);
cout << "\n\n";
insertionSort(list);
printVector(list, listType);
}
最佳答案
模板只能在头文件中实现。至于为什么,看这里Why can templates only be implemented in the header file?
关于C++ 未定义对(函数)的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27340718/
注意:根据 ECMAScript5.1, section 15.1.1.3 , window.undefined 是只读的。 现代浏览器正确地实现了这一点。例如:Safari 5.1、Firefox
我用谷歌搜索,检查了所有常见的响应。这些脚本似乎顺序正确(它们在 the demo 中以相同的顺序工作)但由于某种原因,当我尝试实现它时,我得到了错误。 我有一个 paste bin用我完整的页面代码
我有以下代码: simpleExample.html: Simple example Open the Console. js/simpleExampleJS.
所以我对 typescript 很陌生。 这是我的 tsconfig.json 文件的样子, 我什至不知道那些“例子”是从哪里来的 这是我在浏览器中遇到的错误 这是我的 package.json 最佳
我被 TypeScript 错误困住了: Failed to compile. undefined TypeScript error in undefined(undefined,undefined)
我已将 onlcick 事件附加到表单的提交按钮以覆盖默认的 POST 请求,但在使其正常工作时遇到了一些问题。 我想要的是点击添加到购物车的商品,但只显示模式确认而不刷新页面。 这段代码在我的静态示
我已经完成了这个link .但是给定的解决方案并没有解决我的问题。所有经验丰富的人都建议使用 getActivty().getApplicationContext()。但我使用的是普通类(class)
我有一个应用程序,其中 webpack 配置为模块 bundler ,babel 作为我的 js 编译器。全部都在 Node 引擎上。我设置当我运行 npm run dev 时,将会发生以下流程: w
我正在尝试在浏览器中呈现网址的 JSON 数据,但它在 div 中显示为 undefined, undefined .当我将其响应放入console.log时对象及其数据出现,因此它出现在控制台和浏览
为什么我会收到 Cannot invoke an object which is possibly 'undefined'即使在我检查了 func 之后,Typescript 也会出错引用不是未定义的
我想使用airbnb的eslint修改我的代码结构。我已遵循 eslint-config-airbnb 中给出的说明。启动命令后npm run lint,结果由 'fetch' is not Defi
这个问题在这里已经有了答案: What is the consequence of this bit of javascript? (4 个答案) 关闭 9 年前。 我看到一些 jQuery 脚本嵌
我一直收到这个 pouchDB 错误,我不知道这是怎么回事。 Error: connect ENFILE 127.0.0.1:5984 - Local (undefined:undefined)
import os from os.path import abspath, dirname import sys # Set up django project_dir = abspath(dirn
在 javascript 中,要检查变量是否从未创建过,我们只需执行 if (typeof MyVariable !== "undefined"){ ... } 我想知道如何在 CoffeeScrip
我正在尝试编译 FreeLing,它使用 CMake 来检测 Boost。这是负责它的代码: find_package(Boost COMPONENTS regex filesystem thre
我收到“JQUERY 未定义”错误。你有什么想法吗(代码如下)。 $(document).ready(function() { window.print();
无论我是否将 jQuery $.ajax 调用放入 $(document).ready(function() { 中,我都会收到此错误。这是在 ASP.NET MVC .cshtml 文件上.
我正在构建的网站上遇到问题,但数据表不存在加载(在服务器上)但在本地主机(xamp)上工作正常。 Firefox 会抛出错误“$ 未定义”。 我用谷歌搜索了这些错误,我发现一个 friend 的解决方
当我在 $(document).ready 之前明确包含 jQuery 库时,我无法弄清楚为什么它仍然无法识别 jQuery 语法
我是一名优秀的程序员,十分优秀!