473,847 Members | 2,011 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Problem with basic templates on GCC

Hi,
If this should be directed to another group, please let me know...
I've been working with templates for a few weeks and have been able to
develop some nice code on solaris using the Forte C++ compiler (version 7).
However, nothing related to templates seems to be compiling correctly when I
use g++ on netbsd. I can't tell if it is either: a problem with my code, a
problem with NetBSD, or a problem with GCC. I have tried to create the
most basic of tests to illustrate the problem. Could someone tell me why
this compiles and runs fine using the Forte compiler but does not with g++?

MyTemp.h
--------------------------
#include <iostream>
template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};
MyTemp.cpp
----------------------------------------
#include "MyTemp.h"

template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{
cout<<temp;
}

Test.cpp
------------------------------------------
#include <unistd.h>
#include <iostream>
#include <string>
#include <MyTemp.h>
using namespace std;
int main()
{
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

------------------------------------------------------
g++ -c -I./ -g -D_DEBUG -Wall -Wno-parentheses -c *.cpp
g++ *.o -o Test
/usr/lib/libstdc++.so: warning: reference to compatibility vfork(); include
<unistd.h> for correct reference
Test.o: In function `main':
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
*** Error code 1

Stop.
Jul 23 '05 #1
13 1977
Winbatch wrote:
Hi,
If this should be directed to another group, please let me know...
I've been working with templates for a few weeks and have been able to
develop some nice code on solaris using the Forte C++ compiler (version 7).
However, nothing related to templates seems to be compiling correctly when I
use g++ on netbsd. I can't tell if it is either: a problem with my code, a
problem with NetBSD, or a problem with GCC. I have tried to create the
most basic of tests to illustrate the problem. Could someone tell me why
this compiles and runs fine using the Forte compiler but does not with g++?

MyTemp.h
--------------------------
#include <iostream>
template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};
MyTemp.cpp
----------------------------------------
#include "MyTemp.h"

template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{
std::cout<<temp ;
}

Test.cpp
------------------------------------------

// What's this? #include <unistd.h>
#include <iostream>
#include <string>
#include <MyTemp.h>
using namespace std;
int main()
{
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

------------------------------------------------------
g++ -c -I./ -g -D_DEBUG -Wall -Wno-parentheses -c *.cpp
g++ *.o -o Test
/usr/lib/libstdc++.so: warning: reference to compatibility vfork(); include
<unistd.h> for correct reference
Test.o: In function `main':
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
*** Error code 1


It compiles fine here with g++ 3.4.2. Which version are you using? My
exact code:
#include <iostream>
#include <string>
template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};
template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{
std::cout<<temp ;
}
int main()
{
using namespace std;
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

--
Ioannis Vranos

http://www23.brinkster.com/noicys
Jul 23 '05 #2
The problem is that at the point of instantiation (MyTemp<string>
mt("TEST");, Test.cpp) compiler sees only declaration of template class
member functions (from MyTemp.h file) and no their definitions.
You should #include MyTemp.cpp into Test.cpp file. Because for template
classes definions (not only declarations) of all members must be visible at
the point of instantiation.
So you should change
#include <MyTemp.h>
to
#include "MyTemp.cpp "
in Test.cpp file.

But #include 'ing cpp file looks ugly.
I would advise you to rewrite your code as follows:

MyTemp.h
--------------------------
#include <iostream>
#include "MyTemp.hpp "

template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};

MyTemp.hpp hpp is commonly used extension for templates
implementation files
----------------------------------------
template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{
cout<<temp;
}

Test.cpp
------------------------------------------
#include <unistd.h>
#include <iostream>
#include <string>
#include "MyTemp.h"
using namespace std;
int main()
{
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

There is a VERY GOOD book on C++ templates "C++ Templates: The Complete
Guide" by David Vandevoorde, Nicolai M. Josuttis, ISBN : 0-201-73484-2

Good Luck,
HappyHippy
"Winbatch" <wi******@techi e.com> wrote in message
news:nd******** *************@t wister.nyc.rr.c om...
Hi,
If this should be directed to another group, please let me know...
I've been working with templates for a few weeks and have been able to
develop some nice code on solaris using the Forte C++ compiler (version
7). However, nothing related to templates seems to be compiling correctly
when I use g++ on netbsd. I can't tell if it is either: a problem with my
code, a problem with NetBSD, or a problem with GCC. I have tried to
create the most basic of tests to illustrate the problem. Could someone
tell me why this compiles and runs fine using the Forte compiler but does
not with g++?

MyTemp.h
--------------------------
#include <iostream>
template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};
MyTemp.cpp
----------------------------------------
#include "MyTemp.h"

template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{
cout<<temp;
}

Test.cpp
------------------------------------------
#include <unistd.h>
#include <iostream>
#include <string>
#include <MyTemp.h>
using namespace std;
int main()
{
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

------------------------------------------------------
g++ -c -I./ -g -D_DEBUG -Wall -Wno-parentheses -c *.cpp
g++ *.o -o Test
/usr/lib/libstdc++.so: warning: reference to compatibility vfork();
include <unistd.h> for correct reference
Test.o: In function `main':
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
*** Error code 1

Stop.

Jul 23 '05 #3

"HappyHippy " <ka******@mail. ru> wrote in message
news:d1******** **@charm.magnus .acs.ohio-state.edu...
The problem is that at the point of instantiation (MyTemp<string>
mt("TEST");, Test.cpp) compiler sees only declaration of template class
member functions (from MyTemp.h file) and no their definitions.
You should #include MyTemp.cpp into Test.cpp file. Because for template
classes definions (not only declarations) of all members must be visible
at the point of instantiation.
So you should change
#include <MyTemp.h>
to
#include "MyTemp.cpp "
in Test.cpp file.

But #include 'ing cpp file looks ugly.
I would advise you to rewrite your code as follows:

MyTemp.h
--------------------------
#include <iostream>
#include "MyTemp.hpp "

template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};

MyTemp.hpp hpp is commonly used extension for templates
implementation files
----------------------------------------
template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{
cout<<temp;
}

Test.cpp
------------------------------------------
#include <unistd.h>
#include <iostream>
#include <string>
#include "MyTemp.h"
using namespace std;
int main()
{
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

There is a VERY GOOD book on C++ templates "C++ Templates: The Complete
Guide" by David Vandevoorde, Nicolai M. Josuttis, ISBN : 0-201-73484-2

Good Luck,
HappyHippy
"Winbatch" <wi******@techi e.com> wrote in message
news:nd******** *************@t wister.nyc.rr.c om...
Hi,
If this should be directed to another group, please let me know...
I've been working with templates for a few weeks and have been able to
develop some nice code on solaris using the Forte C++ compiler (version
7). However, nothing related to templates seems to be compiling correctly
when I use g++ on netbsd. I can't tell if it is either: a problem with
my code, a problem with NetBSD, or a problem with GCC. I have tried to
create the most basic of tests to illustrate the problem. Could someone
tell me why this compiles and runs fine using the Forte compiler but does
not with g++?

MyTemp.h
--------------------------
#include <iostream>
template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};
MyTemp.cpp
----------------------------------------
#include "MyTemp.h"

template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{
cout<<temp;
}

Test.cpp
------------------------------------------
#include <unistd.h>
#include <iostream>
#include <string>
#include <MyTemp.h>
using namespace std;
int main()
{
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

------------------------------------------------------
g++ -c -I./ -g -D_DEBUG -Wall -Wno-parentheses -c *.cpp
g++ *.o -o Test
/usr/lib/libstdc++.so: warning: reference to compatibility vfork();
include <unistd.h> for correct reference
Test.o: In function `main':
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
*** Error code 1

Stop.


HH,
Thanks, I will try it. Why would it work in some versions of gcc (as
reported by Ioannis), but not by others? Did it later become part of the
standard?
Jul 23 '05 #4

"Ioannis Vranos" <iv*@remove.thi s.grad.com> wrote in message
news:1110938952 .429507@athnrd0 2...
Winbatch wrote:
Hi,
If this should be directed to another group, please let me know...
I've been working with templates for a few weeks and have been able to
develop some nice code on solaris using the Forte C++ compiler (version
7). However, nothing related to templates seems to be compiling correctly
when I use g++ on netbsd. I can't tell if it is either: a problem with
my code, a problem with NetBSD, or a problem with GCC. I have tried to
create the most basic of tests to illustrate the problem. Could someone
tell me why this compiles and runs fine using the Forte compiler but does
not with g++?

MyTemp.h
--------------------------
#include <iostream>
template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};
MyTemp.cpp
----------------------------------------
#include "MyTemp.h"

template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{


std::cout<<temp ;
}

Test.cpp
------------------------------------------

// What's this? #include <unistd.h>
#include <iostream>
#include <string>
#include <MyTemp.h>
using namespace std;
int main()
{
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

------------------------------------------------------
g++ -c -I./ -g -D_DEBUG -Wall -Wno-parentheses -c *.cpp
g++ *.o -o Test
/usr/lib/libstdc++.so: warning: reference to compatibility vfork();
include <unistd.h> for correct reference
Test.o: In function `main':
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:7: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::MyTemp(basic _string<char,
string_char_tra its<char>, __default_alloc _template<false , 0> >)'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
/arpa/ag/d//Test/Test.cpp:8: undefined reference to
`MyTemp<basic_s tring<char, string_char_tra its<char>,
__default_alloc _template<false , 0> > >::print(void )'
*** Error code 1


It compiles fine here with g++ 3.4.2. Which version are you using? My
exact code:
#include <iostream>
#include <string>
template <class T> class MyTemp
{
private:
T temp;

public:
MyTemp (T temp1);
void print();
};
template<class T> MyTemp<T>::MyTe mp( T temp1 )
{
temp = temp1;
}
template<class T> void MyTemp<T>::prin t()
{
std::cout<<temp ;
}
int main()
{
using namespace std;
cout<<"In Test"<<endl;
MyTemp<string> mt("TEST");
mt.print();
return 0;
}

--
Ioannis Vranos

http://www23.brinkster.com/noicys


Ioannis,
Can you provide the compile command you used?
Jul 23 '05 #5
> It compiles fine here with g++ 3.4.2. Which version are you using? My
exact code:

2.95
Jul 23 '05 #6
HH,

Your sample indicates that I should include the .hpp from the .h. Is that
right? Wouldn't the class need to be defined before the implemenation? (ie
shouldn't the .hpp include the .h instead?)

Winbatch
Jul 23 '05 #7
Winbatch wrote:
It compiles fine here with g++ 3.4.2. Which version are you using? My
exact code:


2.95

There's your problem. Upgrade to a more recent version if you can (2.95
had some problems with template code).

HTH,
--ag

--
Artie Gold -- Austin, Texas
http://it-matters.blogspot.com (new post 12/5)
http://www.cafepress.com/goldsays
Jul 23 '05 #8
"Artie Gold" <ar*******@aust in.rr.com> wrote in message
news:39******** *****@individua l.net...
Winbatch wrote:
It compiles fine here with g++ 3.4.2. Which version are you using? My
exact code:


2.95

There's your problem. Upgrade to a more recent version if you can (2.95
had some problems with template code).

HTH,
--ag


I thought I was seriously going nuts here. Unfortunately, it's not my
machine so I don't have much control. What do you think of the .hpp route
mentioned previously? I'm trying to implement it on that machine..
Jul 23 '05 #9
HH,

Just wanted to thank you - your suggestion to use the .hpp's not only helped
me to successfully compile on GCC 2.95 on NetBSD, but also on AIX 5.1 using
/usr/vacpp/bin/xlC. (Something I was struggling to accomplish as well).

Thanks again,
Winbatch
Jul 23 '05 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
4406
by: JP SIngh | last post by:
Thanks to Manohar for writing the basic code for displaying the managers and the employees in a tree like structure. I have adapted the code below but it gives me an error "exception occcured" after the first recursion. Any ideas what can be done to make the following code work. Thanks
5
7426
by: Clifford W. Racz | last post by:
Has anyone solved the issue of translating lists in Word 2003 (WordML) into xHTML? I have been trying to get the nested table code for my XSLT to work for a while now, with no way to get the collection that I need. To begin, I am using xsltproc that conmes with Cygwin as my processor. I have no particular affinity to this processor except that it is open source and standards compliant. I don't like M$, but if using a M$ processing...
5
1656
by: Michael Olea | last post by:
Here is a design problem I ran into this am - and I have cleaned the bathroom, scrubbed toilet sink and tub, windexed all glass, mopped the floor, and vacuumed the house - no dice, the problem is still there. Maybe y'all have some ideas? Background ========== The basic idea behind templates, of course, is that much code is independent
11
1932
by: Rolf Barbakken | last post by:
I have an xml with records like this one: <a:response> <a:href>http://server/public/sol/comp/1049306.eml</a:href> <a:propstat> <a:status>HTTP/1.1 200 OK</a:status> <a:prop> <d:customerid>1049306</d:customerid> <e:professioncode b:dt="mv.string"> <c:v>byggtapetserarbeider</c:v>
6
1425
by: B. Williams | last post by:
I have a problem dealing with class template where I was to write a class and after submitting the class, this is the feedback I got back from the instructor. I don't really understand it. Can someone please assist me. Your constructor needs to do something. It should take in 4 values and pass these to the individual set functions. I think if you go on to write main you'll see the compiler errors and they should help. I did write...
9
2666
by: Jerome Durand | last post by:
Hello, I'm trying to write something along the following lines but I cannot get this to compile. template <typename derivedstruct Base { typedef typename derived::valueType valueType; virtual valueType Value() = 0; };
2
1102
by: timwilson | last post by:
I am a developer..... not a designer :) I am looking for a place to find some templates, layouts, etc. for a simple web application that I am getting ready to start. So far to date I have been doing content management backend systems for our corporate websites. With this we bought designs and then I modified them till they were no longer recognizable :) to get what I needed. I am looking for something with a very simple layout, but clean...
1
1014
by: Nilla | last post by:
Hi! I have downloaded and installed the design templates Personal Design and Basic from http://msdn.microsoft.com/en-us/asp.net/aa336613.aspx but I cannot make them appear among other templates when choosing "New project" I have also installed other templates like these: http://www.visualwebgui.com/Community/Resources/Codes/tabid/326/articleType/ArticleView/articleId/45/Default.aspx and that works, they are visible under My Templates...
6
4557
by: pauldepstein | last post by:
Let double NR( double x, double(*)(const double&) f ) be the signature of a Newton-Raphson function NR. Here, f is a function which returns a double and accepts a const double&. The aim of the game is to find a zero of this function f (the point at which f crosses the x-axis). This zero-of-f which solves our problem is the double which NR returns. It remains to explain what the "double x" represents. This is the...
0
10984
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
1
10708
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10342
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
9485
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7883
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
7056
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5720
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
1
4531
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
3
3164
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.