我应该如何在我的C++项目中声明全局变量



我有两个矩阵作为全局变量。但是,当我运行我的项目时,我在 xCode 中收到一个 apache Mach-O 链接器错误,指出我的全局变量被声明了不止一次。我已经确定问题是全局变量的放置和头文件的导入。

我的svd.h在这里:

#ifndef __netflix_project__svd__
#define __netflix_project__svd__
#include <stdio.h>
#include "dataManager.h"
const float GLOBAL_AVG_SET1 = 3.608609;
const float GLOBAL_AVG_SET2 = 3.608859;
const int TOTAL_USERS = 458293;
const int TOTAL_MOVIES = 17770;
double **user_feature_table = new double *[TOTAL_USERS];
double **movie_feature_table = new double *[TOTAL_MOVIES];

void initialize(int num_features);
void train();
double predictRating(int user, int movie); 


#endif /* defined(__netflix_project__svd__) */

我的svd.cpp在这里:

#include "svd.h"

void initialize(int num_features) {
    for(int i = 0; i < TOTAL_USERS; i++) {
        user_feature_table[i] = new double[num_features];
        for(int k = 0; k < num_features; k++) {
            user_feature_table[i][k] = GLOBAL_AVG_SET2 / num_features;
        }
    }
    for(int i = 0; i < TOTAL_MOVIES; i++) {
        movie_feature_table[i] = new double[num_features];
        for(int k = 0; k < num_features; k++) {
            movie_feature_table[i][k] = GLOBAL_AVG_SET2 / num_features;
        }
    }
}

我的主.cpp看起来像这样:

#include <iostream>
#include "svd.h"



int main(int argc, const char * argv[]) {
    // Parse file and store test points as testPoint objects
    std::vector<testPoint*> dataSet = fillTestPoints();

    // Get global average of data set
    /*
    double avg = getGlobalAverage(dataSet);
    printf("%f", avg);
     */
    initialize(30);
    for(int i = 0; i < TOTAL_USERS; i++) {
        printf("%fn", user_feature_table[i][0]);
    }
    return 0;
}

我以前遇到过这个问题,但通过取出全局变量来修复它。但是,我确实需要优化此代码,并且使用全局变量是执行此操作的方法,因此我确实需要弄清楚这一点。谢谢!

在头文件中,只声明它们。

extern const float GLOBAL_AVG_SET1;
extern const float GLOBAL_AVG_SET2;
extern const int TOTAL_USERS;
extern const int TOTAL_MOVIES;
extern double **user_feature_table;
extern double **movie_feature_table;

在其中一个.cpp文件中,定义并初始化它们:

const float GLOBAL_AVG_SET1 = 3.608609;
const float GLOBAL_AVG_SET2 = 3.608859;
const int TOTAL_USERS = 458293;
const int TOTAL_MOVIES = 17770;
double **user_feature_table = new double *[TOTAL_USERS];
double **movie_feature_table = new double *[TOTAL_MOVIES];

相关内容

  • 没有找到相关文章