我创建了一个代码文件来保存我的所有全局变量,其中一个是像这样的数组:
global.cpp
#include <array>
array<string, 3> arr = {"value1", "value2","value3"};
我在另一个代码文件中测试数组值,如下所示:
testarrays.cpp
#include <iostream>
#include <array>
template <size_t N>
void TestingArrays(const array<string, N>& ArrT);
void ArrayTester()
{
extern array<string,3> arr;
array <string, 2> localarr = {"v1" ,"v2"};
TestingArrays(localarr);
TestingArrays(arr);
}
template <size_t N>
void TestingArrays(const array<string, N>& ArrT)
{
for (auto it = ArrT.cbegin(); it != ArrT.cend(); ++it)
{
cout << "Testing " << *it << endl;
}
}
除了一件事,一切都很美好。我在许多其他地方使用这个全局数组(Arr
)。
这意味着如果我需要更改变量的数量(在这个例子中它有3个)我需要在所有代码文件上做同样的事情...... ...疯狂......
我想用这样的模板:
testarrays.cpp
...
template <size_t N>
extern array<string,N> arr;
...
......但它没有编译。
有人有提示解决这个问题吗?
答案 0 :(得分:2)
using
声明可以让这更容易。然后,您可以在多个位置使用myArr
,但只更改一次大小:
//header.h
#include <array>
#include <string>
using myArr = std::array<std::string, 3>;
extern myArr arr;
接下来将global的定义放在一个新文件中:
//myarr.cpp
#include "header.h"
myArr arr = {"value1", "value2","value3"};
最后在其他编译单元(.cpp文件)中使用它:
//main.cpp
#include "header.h"
#include <iostream>
#include <array>
template <size_t N>
void TestingArrays(const std::array<std::string, N>& ArrT);
void ArrayTester()
{
//extern array<string, 3> arr; // global var doesn't need to be declared here if the header is included
std::array<std::string, 2> localarr = {"v1" ,"v2"};
TestingArrays(localarr);
TestingArrays(arr);
}
template <size_t N>
void TestingArrays(const std::array<std::string, N>& ArrT)
{
for(auto it = ArrT.cbegin(); it != ArrT.cend(); ++it)
{
std::cout << "Testing " << *it << std::endl;
}
}
int main() {
auto value = arr[1];
ArrayTester();
return 0;
}
答案 1 :(得分:1)
使用前向声明创建头文件:
#pragma once
#include <array>
#include <string>
extern std::array<std::string, 3> arr;
并将其包含在您需要的地方:
#include"arr.h"
...
void ArrayTester()
{
array <string, 2> localarr = {"v1" ,"v2"};
TestingArrays(localarr);
TestingArrays(arr);
}