如何在标题中声明const?

时间:2014-03-07 12:36:43

标签: c++ header const

我想测试在头文件中定义一个const并在函数中使用它,然后调用它。但是我得到了错误,我添加了包含警卫但没有帮助。错误是:LNK1169:找到一个或多个已定义的乘法符号。我怎么能以另一种方式做到这一点?在.h中声明const并在.cpp中定义此const然后在所有其他.cpps中包含此.cpp是唯一的解决方案吗?

标题

#ifndef STORY
#define STORY
const int x = 4;
#endif

的.cpp

#include <iostream>
#include "8-04.h"

void func1()
{
    int w = x;
    std::cout << "func1 " << w << std::endl;
}

的.cpp

#include <iostream>
#include "8-04.h"

void func2()
{
    int z = x;
    std::cout << "func2 " << z << std::endl;
}

主要

#include <iostream>
#include "8-04.h"
#include "8-04first.cpp"
#include "8-04second.cpp"

using namespace std;

int main()
{
    func1();
    func2();
}

3 个答案:

答案 0 :(得分:4)

问题是每个.cpp都包含.h。这意味着每个.o包含const int x。当链接器将这些链接在一起时,您将获得多个定义。

解决方案是修改.h

#ifndef STORY
#define STORY
extern const int x;  //Do not initialise
#endif

单个 .cpp:

const int x=4

修改 我甚至没有看到#include <file.cpp>业务。不要那样做。太可怕了。

答案 1 :(得分:0)

这应该是:

header.h:

#ifndef STORY
#define STORY
const int x = 4;
void func1();
void func2();
#endif

fun1.cpp

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

void func1()
{
    int w = x;
    std::cout << "func1 " << w << std::endl;
}

fun2.cpp

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

void func2()
{
    int z = x;
    std::cout << "func2 " << z << std::endl;
}

的main.cpp

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

using namespace std;

int main()
{
    func1();
    func2();
}

您不能包含“.cpp”

答案 2 :(得分:0)

可以这样做:

header.h:

#ifndef STORY
#define STORY
const int x = 4;
void func1();
void func2();
#endif

fun1.cpp

#include <iostream>
#include "header.h"
using namespace std;

void func1()
{
    int w = x;
    cout << "func1 value of w = " << w << "\n";
}

fun2.cpp

#include <iostream>
#include "header.h"
using namespace std;

void func2()
{
    int z = x;
    cout << "func2 value of z = " << z << "\n";
}

的main.cpp

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

int main()
{
    func1();
    func2();
}

“。cpp”文件不能包含在主源文件中。