LINUX.ORG.RU

Константы в С++


0

0

Согласно Страуструпу стр 244 константы по умолчанию подразумевают внутреннюю компоновку, тогда это должно работать: c++test9_f1.cc

#include <iostream>
#include "c++test9.h"

void f(const int *p)
{
        std::cout << "f1" << p << std::endl;
} 
c++test9_f2.cc
#include <iostream>
#include "c++test9.h"
void h(const int *p)
{
        std::cout << "f2" << p <<std::endl;
} 
c++test9.h:
const int* x = 0;
c++test9.cc:
#include "c++test9.h"
void f(const int*);
void h(const int*);

int main()
{
        f(x);
        h(x);
}

Компилируем:

$g++ -std=c++98 -pedantic -Wall -Wextra c++test9_f1.cc -o c++test9_f1.o -c
%g++ -std=c++98 -pedantic -Wall -Wextra c++test9_f2.cc -o c++test9_f2.o -c
%g++ -std=c++98 -pedantic -Wall -Wextra c++test9.cc -o c++test9.o -c
сщбираем:
$g++ c++test9.o c++test9_f1.o c++test9_f2.o
c++test9_f1.o(.bss+0x0): multiple definition of `x'
c++test9.o(.bss+0x0): first defined here
c++test9_f2.o(.bss+0x0): multiple definition of `x'
c++test9.o(.bss+0x0): first defined here 
И что такое? Компоновка то внутренняя, или Я чего не догоняю?

У тебя переменная x не является константой

mannaz
()

Константные указатели так объявляются:

[code=cpp] int* const x = 0; [/code]

А вообще не мучай себя и забей на плюсы!

anonymous
()
Ответ на: комментарий от anonymous

> вместо static в плюсах есть namespace

Решил блеснуть интеллектом? Завтра у доски перед одноклассниками не опозорься!

anonymous
()
Ответ на: комментарий от b3qkc

Да потому что должна быть внутренней, так в стандарте написано. С теч что х не константа согласен, проглядел.

mskmsk1985
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.